Java语法糖
- for-each:
int[] list=new int{1,2,3,4,5};
for(int i:list){
System.out.println(i);
}
优点:语法简单、避免越界;
缺点:不能删除/替换元素、不知道索引位置、不能反向遍历,不能同时遍历两个。
- 枚举:(enum)
枚举变量的取值只在一个有限的集合内(星期,月份等);
枚举类用enum代替class,也就是说枚举类不用写class;
enum的值有多少个,就有多少个实列对象;
枚举类不能new;
枚举类只能是default和private。就是说只能内部调用。 - 不定项参数:
int… x(在类型之后加三个点);
实际上是一个数组;
重写时需要注意:
1、一个方法只能有一个不定项参数;且必须位于参数列表最后;
2、固定参数优先级高于不定项参数。
3、方法中有不定项数,不能再有同类型参数。 - 静态导入:
import static(导入一个类的静态方法和静态变量)
可以不用写类名,可以直接引用方法。
不同类的同名方法需要使用类名加方法的引用形式。 - 自动拆装箱:(拆箱:对象变基本类型;装箱:基本类型变对象)
基本类型和对象的转换写法变简单;
自动装箱:Integer a=Integer.valueOf(2)简化为:Integer a=2;
自动拆箱:int b=a.intValue()简化为:int b=a
ArrayList中只能是对象,其方法一般使用时默认用自动拆装箱的方式,但需要注意。
int a=1;Integer b=1;(ab)?😭,+,-,*,/在判断运算时会自动拆箱);(等等判断符在判断基本型时判断内容,在判断对象时判断指针)(equals方法判断时要求同类且内容相同) - 多异常并列:
try{}catch(IOException | SQLException){}一个catch中写多个异常,
多个异常之间不能有直接或间接的继承关系。 - 数值类型赋值优化:
short a=(short)0b101001;byte、short、int、long在赋值时可以直接用二进制赋值,不需要进行转换为十进制数;(避免二进制转换)
long a=9_99_999L;short、int、long、float、double为了方便记位数,数值中可以使用下划线;
下划线只能出现在数字中,切后必须有数字;
在2/8/10/16进制中都能使用。 - 接口方法:
接口的方法是公开的、未定义的;但是为实现新功能 Lambda表达式接口中支持默认方法/静态方法(都是可以实现的方法)
默认方法:default关键字,默认方法不能重写Object中的方法;实现类和接口可以继承/重写父接口的默认方法;父类和父接口中都有同名同参数方法,子类默认继承父类的方法(为了兼容jdk7以前的版本代码);子类实现的两个接口类都有同名同参数的默认方法,子类需要重写这个方法。
静态方法:static关键字,静态方法只属于本接口,不属于子类/子接口;子接口/子类不能继承静态方法,只能通过接口名来调用。
私有方法:只属于本接口,不能被继承,外部无法调用,只能在当前接口调用。静态私用方法能被静态/默认方法调用,非静态私有方法只能被默认方法调用。 - try-with-resource:
原理:资源对象必须实现AotuCloseable接口,即实现close方法;
在一般的资源对象处理时,必须在finally中使用close方法关闭资源对象,但是在本语法糖中只要将资源对象放入try后的框号即可:try(file){}。 - Resource Bundle:
RB文件加载优化,默认以utf-8加载; - var类型:
局部变量推断,优点是避免了信息冗余,对齐变量名,更容易阅读,
是一个弱类型,但是在Java中实际上还是强类型,编译器推断后不可更改
限制:可以用在非类成员的局部变量上;可以用在for/for-each循环中;变量必须初始化;不能用在方法的返回型和参数型上。 - switch:(多分支选择语句)
不支持类型:Long、float、double
多分支合并,表达式直接赋值:(->)用于合并,default{}返回值必须用break;
int mth=1;
int day=swicth(mth){
case 1,3,5,7,8,10,12->31'
case 4,6,9,11 ->30;
default ->{
int rst=28;
braek rst;
}
}