关键字
- 访问控制
private protected public
- 类,方法和变量
abstract class extends final implements interface native new
static strictfp synchronized transient volatile
- 程序控制
break continue return do while if else for
instanceof switch case default
- 异常处理
try catch throw throws
- 包相关
import package
- 基本类型
boolean byte char double float int long short null
true false
- 变量引用
super this void
- 保留字
goto const
- 不常用字段解释
- strictfp:在接口和类上加上该标识,会对float和double进行严格计算
- transient:在对象成员变量中加上该标识,在对象序列化时,被标识变量不会被序列化
- volatile:在变量前加入该标示,解决多线程情况下变量的可见性和有序性,但无法解决原子性问题,应用场景为,变量的值不参与修改的情况。参见:Java并发编程:volatile关键字解析
数据类型
基本数据类型
A:整数 占用字节数 byte 1 short 2 int 4 long 8 B:浮点数 float 4 double 8 C:字符 char 2 D:布尔 boolean 1 注意:!!!!! 整数默认是int类型,浮点数默认是double。 长整数要加L或者l。 单精度的浮点数要加F或者f。
思考题和面试题
下面两种方式有区别吗?
float f1 = 12.345f; // 本身是一个float类型 float f2 = (float)12.345; // 开始是一个double类型,强转为float类型
下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3; byte b2 = 4; byte b3 = b1 + b2; // 有问题,byte参与运算就转换为int类型,编译会报错 byte b4 = 3 + 4; // 常量,先把结果计算出来,然后看是否在byte的范围内,如果在,就不报错
下面的操作结果是什么呢?
byte b = 130; // 编译报错,130不在范围内 byte b = (byte)130; // -126 源码反码补码!???
字符参与运算
是查找ASCII里面的值 'a' 97 'A' 65 '0' 48 System.out.println('a'); // a System.out.println('a' + 1); // 98
字符串参与运算
这里其实是字符串的连接 System.out.println("hello"+'a'+1); // helloa1 System.out.println('a'+1+"hello"); // 98hello System.out.println("5+5="+5+5); // 5+5=55 System.out.println(5+5+"=5+5"); // 10=5+5