Java学习--标识符&关键字、数据类型、类型转换
一、标识符 & 关键字
1. 标识符:
可以理解为名字,我们通常会对一些东西或事情命名,而我们起的这个名就可以看作标识符,在Java中需要用到标识符的可以是为变量、常量、类、方法…命名。
但Java中的标识符有一套命名规则:
- 标识符由数字、字母、下划线( _ )、美元符号( $ ) 组成
- 不能以数字开头
- 区分大小写
- 不能使用关键字作为标识符
- 虽然可以使用 " $ " 符作为文件名,但是不建议用户在自己创建的文件命名中包含 " $ “,包含” $ " 的这类文件一般为系统自动生成的文件命名。
2. 关键字:
关键字可以理解为 Java程序 已经将它作为标识符使用,并且已经能够实现一些功能的标识符,所以前面我们说过标识符不能作为关键字。
Java中的所有关键字可以参考 菜鸟
二、数据类型
1. 基本数据类型
Java中的基本数据类型分为 四类八种
类型 | 分类 | 大小 | 数据范围 | 默认值 |
---|---|---|---|---|
字节型 | byte | 1B | -128 ~ 127 | 0 |
短整型 | short | 2B | -32768 ~ 32767 | 0 |
整形 | int | 4B | -2147483648 ~ 2147483647 | 0 |
长整型 | long | 8B | -9223372036854775808 ~9223372036854775807 | 0 |
单精度浮点数 | floa | 4B | 1.4013E-45~3.4028E+38 | 0.0 |
双精度浮点数 | double | 8B | 4.9E-324~1.7977E+308 | 0.0 |
字符型 | char | 2B | 0~65535 | ‘\u0000’ |
布尔型 | Boolean | 1B | true、false | false |
2. 引用数据类型
除基本数据类型的所有其他数据类型都是引用数据类型,常用的有字符串、数组等…,所有引用数据类型都是以对象的形式存在的。
引用数据类型的默认值为 null
3. 类型转换
整型字面量的默认类型是 int
,浮点型的默认数据类型是double
。
- byte、short、char 可以发生数学运算,且都会被先自动转换为 int 类型再进行计算 ,最后结果也为int 类型,同时这里也用到了第三点的常量优化
byte b = 12;
short a = 551;
char c = 1;
System.out.println(a+b); // 653
System.out.println(b+c); // 13
System.out.println(c+a); // 552
// 都是可以正常执行的
- byte、short、char 在赋值时,如果赋予的不同类型的值没有超过该类型的范围,系统会自动添加一个强制转换
short a = 551; // 字面量 551 默认为int型,但是没有超过short的范围,这是不会报错的
byte b = 21; // 同理
char c = 2555858; //这里的 int值 太大了,char能接受的范围是 0 ~ 65535 ,报错
- 常量优化机制:当赋值的值结果为一个常量或常量表达式时,编译器javac 将会在编译期间计算出常量或常量表达式的值,然后判断该常量值是否满足被复制变量数据类型的范围,是则自动强制转换。
byte b = 12;
short a = 551;
short d = (a+b); // a + b的结果是一个int类型,并且范围在short之内,但由于采用了变量
// 不能使用常量优化即 int型转换为 short 会有损失,最终报错
short e = (12+551); // 这里就不会报错,触发了常量优化
但是,有变量就不行了,他不能知道变量的值,只知道变量的类型,所以他不能判断最后的结果到底有没有超过赋值变量的类型范围,不能执行第二点,报错
- 两种不同类型的变量发生运算,结果类型为数据范围比较大的那一种,任何类型的变量同String相加都会变成String类型。
double a = 2.1;
int b = 2;
System.out.println(a*b); // 最终结果为 4.2
- boolean类型不能发生数据转换
3.1 自动类型转换
自动类型转换:在变量的运算过程中,所有数据表示范围较小的变量都会自动转换为数据表示范围较大变量的类型。
如下图转换关系中:
黑色箭头表示自动类型转换后不会造成数据丢失,红色箭头表示可能造成丢失。
3.2 强制类型转换
比较通用的一种方法:
类型A 接收变量 = (类型A) 待转变量
int a = 12;
short b = a; // 这样的赋值肯定会引发错误
// 当编译器不确定右边变量的类型是否在左边变量类型范围之内
short c = (short)a; // 当你不得已必须要转换类型,或者确定转换后不会造成数据丢失时可以使用
新手学习,如有错误,欢迎指出!!