数据类型和变量
数据类型和变量
一·数据类型
1.基本类型
1·1整型
| 类型 | 存储需求 | 取值范围 |
|---|---|---|
| byte | 1字节 | -128~127 |
| short | 2字节 | -32768~32767 |
| int | 4字节 | -2147483648~2147483647 |
| long | 8字节 | –9,223,372,036,854,775,808 ~9,223,372,036,854,775,807 |
整型中最常用的是 int 类型
1.2浮点型
| 类型 | 存储需求 | 取值范围 |
|---|---|---|
| float | 4 字节 | 大约±3.40282347E+38F (有效位数 6~7 位) |
| double | 8 字节 | 大约±1.79769313486231570E+308 (有效位数 15 位) |
一般情况下,double 最常用;float 型的数值有一个后缀“f”,没有后缀的浮点数默认为 double 型
1.3字符型
| 类型 | 存储需求 | 取值范围 |
|---|---|---|
| char | 2字节 | 0 ~ 65535 |
1.4布尔型
boolean类型只有两个之false和true
2.引用类型
数组: int[] arr = new int[5];
对象/类: Student stu = new Student();
接口: ProductDao dao = new ProductDaoImpl;
注:String是最常用的引用类型,不属于8大基本类型
二.变量
变量,顾名思义"可变的量,简称变量"。对变量的操作只有两种,读和写
1.标识符
- 标识符是赋予变量,类和方法的名称
- 标识符必须以字母,下划线或美元符号开头
- 标识符对大小写敏感
注意:
- 变量名要做到见名知意,尽量采用英文单词,尽量采用驼峰命名法
- 变量名中不能有空格
- 变量名要避开java中的保留字(class,int,public,void,static)
2.变量的定义与赋值
public class Demo03 {
public static void main(String[] args) {
String name = "张三";//定义name并赋初始值为张三
short age = 20;//定义年龄age并赋值为20
double score;//定义成绩score并赋值为95
score=95;//等号为赋值符号
System.out.println("姓名"+name);
System.out.println("年龄"+age);
System.out.println("成绩"+score);
}
}

说明:
- 定义变量时,要使用类型名如short,double打头(用于区分不同类型),后面干变量名称
- 在java中“=”并不是运算符,而是赋值符,在上面它表示将右侧的20写入变量age中。
- 可以定义变量的同时赋值(写入值),也可以先定义变量,然后再赋值,如:score。
- 在上面age,score都是标量名称,我们通过“=”可以对变量写入值,也可以向上面的输出代码直接通过变量名称读出值然后输出到控制台窗口,“+”其链接的作用,把前面的字符串和后面的变量连接到一起
3.常量
常量是一个固定的值,如:3.14,250,"詹姆斯"
int a = 10;
a是一个变量名,10是一个常量,把常量10放到变量a中。
三.交互——Scanner
1.Scanner
上面案例都是输出数据,如果需要从控制台接收内容怎么办?
java中的控制台输入是通过Scanner类来实现的,语法如下:
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
}
}
常用方法如下
| 方法名 | 说明 |
|---|---|
| next() | 当用户在控制台输入字符串时,使用此方法接收 |
| nextInt() | 当用户在控制台输入整数时,使用此方法接收 |
| nextFloat() | 当用户在控制台输入float类型的数字时,使用此方法接收 |
| nextDouble() | 当用户在控制台输入double类型的数字时,使用此方法接收 |
一个名字,在名字后面加三个字“你很棒”,在接收从控制台输入的年龄和成绩进行输出。
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个名字");
String name = sc.next();
name = name+"你很棒";
System.out.println("请输入年龄");
int age = sc.nextInt();
System.out.println("请输入成绩");
double score = sc.nextDouble();
System.out.println(name);
System.out.println("年龄:"+age+",成绩:"+score);
}
}

四.运算
常用的数学运算除了加减乘除外,还有求余的运算,用“%"表示
1.数学运算
public static void main(String[] args) {
int num1 = 5;
int num2 = 2;
int a = num1/num2;
int b = num1%num2;
System.out.println(a);
System.out.println(b);
}

练习1
从控制台获取一个天数,计算此天数对应的周数和剩余的天数
import java.util.Scanner;
public class Demo09 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个天数");
int days = sc.nextInt();
int week = days/7;
int remainder = days%7;
System.out.println("周数:"+week+",剩余天数:"+remainder);
}
}

说明:
- nextInt方法(功能块)是个阻值方法,用于从键盘读入一串文本并自动转换为整数类型。
- 运算潜规则:对于两个操作的运算符,左右两个操作的类型决定了结果的类型。例如第8行,如果days的值为10,则week的最终值为1,这是因为days和7的都是整数,结果也是整数(并且是向下取整)如果days的值为5,则week的最终值为0
练习2
小明去美国旅游,但宾馆中的温度适宜华氏度的方式显示的,现在编写一个程序,输入一个华氏度,显示一个摄氏度(摄氏度=5/9*(华氏度-32))
import java.util.Scanner;
public class Demo10 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入华氏度");
double hsd = sc.nextDouble();
double ssd = 5.0/9*(hsd-32);
System.out.println("华氏度:"+hsd+"\t对应的摄氏度为:"+ssd);
}
}

说明:
- nextDouble方法(功能块)是个阻止方法,用于从键盘读入一串文本并自动转换为双精度浮点数。
- 运算潜规则:对于两个操作的运算符,左右两个操作的类型决定了结果的类型。例如第8行,5/9的值为0,但是5.0的值为0.555······
2.Boolean类型的应用
boolean的取值只有两个true和false
练习1
public static void main(String[] args) {
//关系运算符返回结果:正确 错误 布尔值
int a = 10;
int b = 20;
int c = 21;
System.out.println(c%a);// c/a 21/10 = 2...1
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
}

练习2
某航空公司招收飞行员的条件时视力超过1.6,身高在169cm和170cm之间
import java.util.Scanner;
public class Demo11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入视力");
double eyes = sc.nextDouble();
System.out.println("请输入身高");
int height = sc.nextInt();
boolean isFit = eyes>1.6&&(height>160&&height<170);
System.out.println("是否符合:"+isFit);
}
}

3.简化写法
在java编程中,我们经常会遇到诸如:a=a+5这是对变量先读后写的编码,java中提供了简化写法
| 完整写法 | 简化写法 |
|---|---|
| a=a+5 | a+=5 |
| a=a-5 | a-=5 |
| a=a*5 | a*=5 |
| a=a/5 | a/=5 |
| a=a%5 | a%=5 |
| 单操作数的自增自减 | |
| a=a+1 | a++ |
| a=a-1 | a-- |
public static void main(String[] args) {
int a = 2;
System.out.println("最初a的值是:"+a);
int b = a++;//执行完这行代码后,先给b赋值,在自增
System.out.println("a++表达式的结果是:"+b);
System.out.println("当前a的值是:"+a);
System.out.println("=========================");
a = 2;
System.out.println("重新给a赋值,现在运算前a的值是:"+a);
int c=++a;//执行完这行代码前,先自增,再赋值
System.out.println("++a的表达式的结果是:"+c);
System.out.println("当前a的值是:"+a);
}

注意:自增自减在后,先参与其他运算。自增自减在前,先进行自增自减,在参与其他运算
运算优先级关系:括号>数学>关系>逻辑>赋值
五.类型转换
自动转换(小----->大)数字型,字符型,布尔型不能相互兼容,不能自动转换
强制转换(大----->小)
public static void main(String[] args) {
int i = 128;
byte b = (byte)i;//内存溢出
//强制转化 (类名)变量名 高--低
//自动转化 低--高
System.out.println(i);
System.out.println(b);
/*
1.不能对布尔值转化
2.不能把对象类型转换为不相干的类型
3.再把高容量转换到低容量的时候,强制转换
4.在转换时可能存在内存溢出或精度问题
*/
System.out.println("=============================");
System.out.println((int)23.7);//23
System.out.println((int)-45.89f);//-45
System.out.println("=============================");
char c = 'a';
int d = c+1;
System.out.println(d);
System.out.println((char) d);
}


浙公网安备 33010602011771号