简介:
语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。——百度百科
目录
1.for-each
2.枚举
3.不定项参数
4.静态导入
5.自动装箱与拆箱
6.多异常并列
7.数值类型赋值优化
8.接口方法
1.默认方法
2.静态方法
3.私有方法(Java9接口的,带实现)
接口VS抽象类
9.try-with-resource
10.ResourceBundle文件加载
11.var类型
12.switch
语法更简单,避免越界错误
for可以删除元素,for-each不可以删除/替换元素
for-each遍历时,不知道当前元素具体位置索引
for-each只能正向遍历,不能反向,也不能同时遍历2个集合
变量取值只在一个有限的集合内
enum关键字声明枚举类,且都是Enum的子类(不需写extends)
enum内部有多少个值,就有多少个实例对象
不能直接new枚举类对象
也可以添加属性/构造函数/方法
构造函数只能是private,default进行内部调用
普通函数的形参列表是固定的
不定项参数(可变参数)类型后面加...
本质是一个数组
一个方法只能有一个不定项参数,且必须位于参数列表的最后
重载的优先级规则
1.固定参数的方法,比可变参数优先级更高
2.调用语句,同时与两个带可变参数的方法匹配会报错
import static 导入一个类的静态方法和静态变量(相当于简写)
静态方法名有明确特征,如有重名,需要补充类名
简化基本类型和对象转换的写法
装箱:基本类型的值被封装为一个包装类对象
拆箱:一个包装类对象被拆开并获取相应的值
这是编译器的工作,在class中已经添加,虚拟机没有自动装箱和拆箱的语句
==:基本类型是内容相同,对象时指针是否相同(内存同一个区域)
基本类型没有空值,对象有null
当一个基础数据类型与封装类进行==、+、-、*、/运算时,会将封装类进行拆箱,然后再运算
把多个异常并列在一个catch中,简写,用|分隔
多个异常之间不能有继承关系,如果有会报错
整数类型用二进制赋值,避免进行运算
在数值字面量中使用下划线_
增加可读性和纠错功能
下划线只能出现在数字中间,前后必须有数字
允许在二/八/十/十六进制的数字中使用
Java8 推出接口的默认方法/静态方法(带实现),为Lambda表达式提供支持
规则:
1:默认方法不能重写Object中的方法
2:实现类可以继承/重写父接口的默认方法
3:接口可以继承/重写父接口的默认方法
4:当父类和父接口都有(同名同参数)默认方法,子类继承父类的默认方法,方便兼容以前版本
5:子类实现2个接口(均有同名同参数的默认方法),那编译错误,必须在子类中重写这个default方法(要用到super)
只属于本接口,不属于子类/子接口
子类(子接口)没有继承该静态方法,只能通过所在的接口名来调用
解决了多个默认方法/静态方法的内容重复问题
只属于本接口,只在本接口内使用,不属于子类/子接口
子类(子接口)没有继承该私有方法,也无法调用
静态私有方法可以被静态/默认方法调用,非静态私有方法被默认方法调用
相同点:
都是抽象的,都不能被实例化(new),都可以有实现方法,都不需要继承者实现所有方法
不同点:
1.抽象类只能继承一个,接口可以实现多个
2.接口的变量默认是public static final,且必须有初值,子类不能修改;而抽象类的变量默认是default,子类可继承修改
3.接口没有构造函数,而抽象类有
4.接口没有main函数,抽象类可以有
5.接口有public/default/private的方法,抽象类有public/private/protected/default的方法
程序如果打开外表资源,在使用后需要正确关闭
考虑异常因素,Java提供try-catch-finally来保证
JDK7提供try-with-resource,比try-catch-finally更简洁
try (FileInputStream fis = ...) { ... } catch (Exception e) { ... }
资源要求在try中,若已经在外面定义,则需要一个本地变量
FileInputStream fis = ...; try (FileInputStream fis2 = fis1) { ... } catch (Exception e) { ... }
JDK9不再要求定义临时变量,可以直接使用
FileInputStream fis = ...; try (fis) { ... } catch (Exception e) { ... }
原理:资源对象必须实现AutoCloseable接口,即实现close方法
Java8及以前,默认以ISO-8859-1方式加载Properties文件
需要利用native2ascii工具(JDK自带)对文件进行转义
JDK9及以后,默认以UTF-8方式加载
若解析文件不是有效的UTF-8,则以ISO-8859-1方式加载
Java10推出:局部变量推断
避免了信息冗余,对齐了变量名,更容易阅读
本质上还是强类型语言,编译器负责推断类型,并写入字节码文件
推断后不能更改
限制:
可以用在局部变量上,非类成员变量
可以用在for/for-each循环
声明时必须初始化
不能用在方法(形式)参数和返回类型
大面积滥用会使代码整体阅读变差
var只在编译时起作用,没有在字节码中引入新内容
不支持long/float/double,剩下都可以
JDK12支持多分支合并,采用-> 直接连接判定条件和动作
JDK12支持直接在表达式赋值
文章持续学习与更新,欢迎大家指正!