标识符命名、instanceof 、自动装箱与拆箱、java关键字
标识符的命名规则
标识符的含义:
是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等等,都是标识符。
命名规则:(硬性要求)
标识符可以包含英文字母,0-9的数字,$以及_
标识符不能以数字开头
标识符不能是关键字
命名规范:(非硬性要求)
类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。
变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
方法名规范:同变量名
instanceof 关键字的作用
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为
boolean result = obj instanceof Class
其中 obj 为一个对象,Class 表示一个类或者一个接口.当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
int i = 0;
System.out.println(i instanceof Integer);
//编译不通过 i必须是引用类型,不能是基本类型
System.out.println(i instanceof Object);//编译不通过
Integer integer = new Integer(1);
System.out.println(integer instanceof Integer);//true
System.out.println(null instanceof Object);
//false ,在 JavaSE规范 中对 instanceof 运算符的规定就是:如果 obj 为 null,那么将返回 false。
Java自动装箱与拆箱
装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer的
valueOf(int) 方法
拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int)。调用方法:Integer的intValue方法
在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:
Integer i = new Integer(10);
而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这
样就可以了:
Integer i = 10;
面试题
1: 以下代码会输出什么?
运行结果:
true
flase
为什么会出现这样的结果?-考虑integer封装类的大小
输出结果表明i1和i2指向的是同一个对象,而i3和i4指向的是不同的对象。此时只需一看源码便知究竟,下面这段代码是Integer的valueOf方法的具体实现:
其中IntegerCache类的实现为:
从这2段代码可以看出,在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。
上面的代码中i1和i2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是同一个对象,而i3和i4则是分别指向不同的对象。
什么是java关键字
事先定义的,有特别意义的标识符。利用关键字来告诉编译器其声明的变量类型、类、方法特性等信息。
java关键字大全
1、abstract-表明类或者成员方法具有抽象属性
2、assert-断言,用来进行程序调试
3、boolean-基本数据类型之一,声明布尔类型的关键字
4、break-提前跳出一个块
5、byte-基本数据类型之一,字节类型
6、case-用在switch语句之中,表示其中的一个分支
7、catch-用在异常处理中,用来捕捉异常
8、char-基本数据类型之一,字符类型
9、class-声明一个类
10、const-保留关键字,没有具体含义
11、continue-回到一个块的开始处
12、default-默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
13、do-用在do-while循环结构中
14、double-基本数据类型之一,双精度浮点数类型
15、else-用在条件语句中,表明当条件不成立时的分支
16、enum-枚举
17、extends-表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
18、final-用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
19、finally-用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
20、float-基本数据类型之一,单精度浮点数类型
21、for-一种循环结构的引导词
22、goto-保留关键字,没有具体含义
23、if-条件语句的引导词
24、implements-表明一个类实现了给定的接口
25、import-表明要访问指定的类或包
26、instanceof-用来测试一个对象是否是指定类型的实例对象
27、int-基本数据类型之一,整数类型
28、interface-接口
29、long-基本数据类型之一,长整数类型
30、native-用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
31、new-用来创建新实例对象
32、package-包
33、private-一种访问控制方式:私用模式
34、protected-一种访问控制方式:保护模式
35、public-一种访问控制方式:共用模式
36、return-从成员方法中返回数据
37、short-基本数据类型之一,短整数类型
38、static-表明具有静态属性
39、strictfp-用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
40、super-表明当前对象的父类型的引用或者父类型的构造方法
41、switch-分支语句结构的引导词
42、synchronized-表明一段代码需要同步执行
43、this-指向当前实例对象的引用
44、throw-抛出一个异常
45、throws-声明在当前定义的成员方法中所有需要抛出的异常
46、transient-声明不用序列化的成员域
47、try-尝试一个可能抛出异常的程序块
48、void-声明当前成员方法没有返回值
49、volatile-表明两个或者多个变量必须同步地发生变化
50、while-用在循环结构中