1 Java中的关键字
被Java语言赋予特定含义的单词就可以称为Java关键字。
1.1 关键字的特点
- 组成关键字的单词字母全部小写。
- Java具有53个关键字,包括2个保留关键字goto、const。在C/C++中,goto常被用于跳出多重循环。但goto 语句的使用往往会使程序的可读性降低,所以 Java 不允许 goto 跳转。const在C语言中定义常量的作用,而Java中要想定义常量可以使用final关键字。goto和const作为保留字存在,目前并不使用,但以后可能会升级为关键字。
- 类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观。
1.2 关键字\保留关键字表
53个关键字,包括两个保留字。
访问控制修饰符的关键字(共3个) | ||||
public | protected | private | (缺省) | |
定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象(共6个) | ||||
class | abstract | interface | extends | implements |
new | ||||
修饰类、方法、属性和变量(共9个) | ||||
static | final | spuer | this | native |
strictfp | synchronized | transient | volatile | |
程序控制语句(共12个) | ||||
if | else | while | for | switch |
case | default | do | break | continue |
return | instanceof | |||
用于异常处理的关键字(共5个) | ||||
try | catch | finally | throw | throws |
用于包的关键字(共2个) | ||||
package | import | |||
数据类型(共10个) | ||||
float | double | long | int | short |
byte | char | boolean | void | enum |
其他关键字(共4个) | ||||
true | false | assert(断言) | null | |
保留字(共2个) | ||||
goto | const |
2 Java中的数据类型
2.1 基本数据类型
一共八种,8bit(位)=1byte(字节)
类型 | 大小(bit) | 取值范围 | 默认值 |
byte | 8 | -128 - 127 | (byte)0 |
short | 16 | -32768 - 32767 | (short)0 |
int | 32 | -2147483648 - 2147483647 | 0 |
long | 64 | -9233372036854477808 - 9233372036854477807 | 0L |
float | 32 | -3.40292347E+38 - 3.40292347E+38(有效位数为6-7位) | 0.0f |
double | 64 | 大约-1.79769313486231570E+308 - 1.79769313486231570E+308(有效位数为15位) | 0.0d |
boolean | 1 | true /false | false |
char | 16 | '\u0000' - '\uffff'(无符号,转换为十进制就是0-65535) | '/uoooo'(null) |
boolean 只有两个值:true/false,可以使用 1 bit 来存储,但是具体大小没有明确规定。某些JVM 会在编译时期将 boolean 类型的数据转换为int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,不过是通过读写 byte 数组来实现的。
当变量作为作为类/对象成员使用时,java才确保给定其初始值,防止程序运行时错误。上诉默认值并不适用于“局部”变量(即:非某个类的字段)。
可以使用十六进制表示浮点数值。例如,0.125可以表示成0x0.1p1。在十六进制表示法中,使用p表示指数,而不是e。注意,尾数采用十六进制,指数采用十进制。指数的基数是2,而不是10。即0.125=0.0625 * 2^1。
Java中所有“非数值”的值都认为是不相同的。不能这样检测一个特定值是否等于Double.NaN:
if (x == Double.NaN) // is never true
然而可以使用Double.isNaN 方法:
if (Double.isNaN(x)) // check whether x is "not a number"
2.1.1 基本数据类型之间的转换
2.1.1.1 隐形(自动)转换
类型的向上提升。小的数据类型—>大的数据类型。
在运算时会将数据转换为二进制数,短长度的二进制数会通过补0的方式补齐相对与大长度的二进制数缺少的位数,再进行运算。因此运算结果会默认转换为大的数据类型
规则:
如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型;
否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型;
否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型; 否则,两个操作数都将被转换为int类型。
注意
char b = ‘a’+18; //正确,因为char本身在码表中可以用数字表示的,然后运算完成之后还是char,应该输出s。
char a = ‘a’;char b = a + 18; // 这样就是错的,因为JVM运算完后不知道结果是多少,所以会提示损失精度的错误。
2.1.1.2 强制转换
类型由大类型向小类型转换。
例如:A的ASCII码为65,a的ASCII码为97 ,char类型转换时使用。
强制转换的语法: (数据类型)变量;
Short b=1;
Int c=2;
Short a=(short)(b+c);
注意
- 强制转换时候,应该考虑范围,是否超过最大值。
- 数据类型强制转换,数据类型应该互相兼容,否则可能损失精度。
2.1.1.3 案例
byte b1=3,b2=4,b;
b=b1+b2; //这一句编译失败,变量的计算,先提升类型,再计算。
b=3+4; //这一句正常,常量值的计算,先算出结果,再在范围内查找,找到了就不会提升,找不到才会提升。
byte b = 130; //编译有问题,超过了范围,应该强制转型,但是最终强转之后结果为-126。
short s1 = 1; s1 = s1 + 1; //在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会出现类型转换编译错误。
short s1 = 1; s1 +=1; //+=是java语言规定的运算符,java编译器会对它进行特殊处理(转换为原来的short类型),因此可以正确编译。也叫隐式类型转换。
2.2 复合类型(引用类型)
数组: int [] arr;
类、自定义的类:class、abstract class
String类型:特殊的引用类型(不可变)
接口、枚举、null类型