目录
1.8之后:
https://advancedweb.hu/new-language-features-since-java-8-to-16/
JDK1.5
静态导入
增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。
语法:import static 包名.类名.静态属性|静态方法|*
增强for循环
作用: 简化迭代器的书写格式。(注意:增强for循环的底层还是使用了迭代器遍历。)
适用范围: 只要是实现了Iterable接口的对象或者是数组对象都可以使用增强for循环。
格式:
for(数据类型 变量名:遍历的目标){
}
注意事项:
- 增强for循环底层也是使用了迭代器获取的,只不过获取迭代器由jvm完成,不需要我们获取迭代器而已,所以在使用增强for循环变量元素的过程中不准使用集合对象对集合的元素个数进行修改。
- 迭代器遍历元素与增强for循环变量元素的区别:使用迭代器遍历集合的元素时可以删除集合的元素,而增强for循环变量集合的元素时,不能调用迭代器的remove方法删除元素。
- 普通for循环与增强for循环的区别:普通for循环可以没有变量的目标,而增强for循环一定要有变量的目标。
- Map集合没有实现Iterable接口,所以map集合不能直接使用增强for循环,如果需要使用增强for循环需要借助于Collection的集合。
可变参数
格式:
数据类型... 变量名
注意的细节:
- 如果一个函数的形参使用上了可变参数之后,那么调用该方法的时候可以传递0个或多个参数也可以传递数组。
- 可变参数实际上是一个Object[]数组对象。
- 可变参数必须位于形参中的最后一个参数。(因此一个函数最多只能有一个可变参数)
自动装箱与自动拆箱
自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类。
自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型。
包装类 基本数据类型
Byte | byte |
Short | short |
Integer | int |
Long | long |
Boolean | boolean |
Float | float |
Double | double |
Character | char |
对象变基本数据类型:拆箱 | 基本数据类型包装为对象:装箱 |
Integer类内部维护了缓冲数组,该缓冲数组存储的-128~127 这些数据在一个数组中。如果你获取的数据是落入到这个范围之内的,那么就直接从该缓冲区中获取对应的数据。
枚举类
枚举类的定义格式:
enum 类名{
//枚举值
}
注意细节:
- 枚举类也是一个特殊的类。
- 枚举值默认的修饰符是public static final。
- 枚举值就是是枚举值所属的类的类型,然后枚举值是指向了本类的对象的。枚举类中声明的每一个枚举值代表枚举类的一个实例对象
- 枚举类的构造方法默认的修饰符是private的。
- 枚举类可以定义自己的成员变量与成员函数。
- 枚举类可以自定义构造函数,但是构造函数的修饰符必须是private。
- 枚举类可以存在抽象的方法,但是枚举值必须要实现抽象的方法。
- 枚举值必须要位置枚举类的第一个语句。
JDK1.8
详见:
https://www.open-open.com/lib/view/open1403232177575.html
主要改动是:
Lambda表达式
(作用:相当于匿名内部类的简化写法)
Stream流操作
(作用:对大数据集合/io流 进行并行的过滤,排序,映射等操作)
参考:https://blog.youkuaiyun.com/qq_37461349/article/details/80463166
https://blog.youkuaiyun.com/lixiaobuaa/article/details/81099838
效率分析: https://www.cnblogs.com/jpfss/p/11262231.html
双冒号 :: 方法引用
移除方法区, MetaSpace元空间取代
hashMap 和 concurrentHashMap