目录
- 1 介绍
- 2 默认构造器
- 3 自动拆装箱
- 4 泛型集合取值
- 5 可变参数
- 6 foreach 循环
- 7 switch
- 8 switch和enum
- 9 枚举类
- 10 try-with-resources
- 11 方法重写时的桥接方法
- 12 匿名内部类
1 介绍
语法糖
指java编译器把*.java
源代码编译成*.class
字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是java编译器给我们程序员的一个额外福利,给糖。
2 默认构造器
编译会生成一个默认的无参构造器,注意是自己不写任何构造器的情况下,一旦写了,就不提供这个构造器;
3 自动拆装箱
针对基础数据类型的包装类;
Integer a = 1; // 等效于Integer a = Integer.valueOf(1);
int b = a; // 等效于int b = a.intValue();
System.out.println(b==a); // 等效于a==b.intValue()
与int的计算都是.intValue()
自动拆箱的结果,自动缓存-128-127新建都是引用同一个对象,超出就是独自new的了;
4 泛型集合取值
泛型擦除,在编译成字节码之后,已经不在意,到底是什么类型,统一按照Object处理;获得值相当于调用的返回Object然后强制转化为泛型实际类型;
5 可变参数
public void fun(String[] args)
根据实参来确定参数大小,要是无参,相当于new String[]{}
作为参数,即创建一个空的数组,而不是null;
6 foreach 循环
for(Object e:array)
会自动转化成相应的for循环,实则一样;
7 switch
java7开始可以将String类型用于switch,原理是将字符串的hashCode做switch,然后拿一个中间变量在不同的switch里面赋值。hashcode是为了提升效率,里面还是要equals,因为可能两个字符串的哈希一样;
8 switch和enum
需要定义一个合成类,用来转化枚举类的类型为可以switch的类型(int);
9 枚举类
枚举类的实例(对象)个数是有限并且确定的,例如性别类(男,女);每一个实例都是一个成员变量,并且有一个唯一id(ordinal),枚举类还会把每个枚举对象都加入到自己内部成员变量数组;
10 try-with-resources
只要类实现了AutoCloseable接口,就可以使用try-with-resources语法而不用写finally的关闭资源块;
try(资源变量 = 创建资源对象){
//使用资源逻辑
}
catch(){
//捕捉异常逻辑
}
优点!try异常和关闭资源异常都会被捕捉;
11 方法重写时的桥接方法
方法重写时,子类方法返回值可以是父类方法返回值的子类;
12 匿名内部类
匿名内部类实际上创建了一个额外的类;