目录

  • 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 匿名内部类

匿名内部类实际上创建了一个额外的类;