JDK8到JDK17新特性小结
JDK8Lambda/*** 匿名开启一个线程*/public static void jdk8Lambda() {new Thread(() -> System.out.println("Lambda")).start();}Stream(流)public static void jdk8Stream(){List<String> list = new ArrayList<
·
JDK8
Lambda
/**
* 匿名开启一个线程
*/
public static void jdk8Lambda() {
new Thread(() -> System.out.println("Lambda")).start();
}
Stream(流)
public static void jdk8Stream(){
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbbb");
list.add("cccc");
list.stream().distinct().forEach(System.out::println);
}
Optional
Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象
public static void jdk8Optional() {
// 创建一个包装对象值为空的Optional对象
Optional<String> optStrObj = Optional.empty();
// 创建包装对象值非空的Optional对象
Optional<String> optStrObj1 = Optional.of("aa");
// 创建包装对象值允许为空的Optional对象
Optional<String> optStrObj2 = Optional.ofNullable(null);
}
方法引用
public static void jdk8Method() {
List<String> strs= new ArrayList();
strs.add("aa");
strs.add("bb");
// 实例中我们将 System.out::println 方法作为静态方法来引用。
strs.forEach(System.out::println);
}
日期Time api
public static void jdk8DateTime() {
// 获取当前年月日
LocalDate localDate = LocalDate.now();
System.out.println(localDate);
// 获取当前时间
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
// 获取具体时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);
// 字符串转换
String str = "2022-01-01";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate2 = LocalDate.parse(str, formatter);
System.out.println(localDate2);
}
JDK9
接口可以有私有方法:
interface Jdk9Interface{
default String defaultTest() {
privateTest();
return "default";
}
private String privateTest() {
System.out.println("私有方法");
return "private";
}
}
增强钻石操作符 <>
public static void jdk9Diamonds(){
// java7和8 <>没有了数据类型
Map<String,String> map8 = new HashMap<>(1);
// java9 添加了匿名内部类的功能 后面添加了大括号{} 可以做一些细节的操作
Map<String,String> map9 = new HashMap<>(1){
@Override
public int size() {
return 0;
}
};
}
异常处理try升级
jdk9可以传一个变量就可以关闭流。
public static void jdk9Try(){
// jdk8:
try(InputStreamReader reader =new InputStreamReader(System.in)){
reader.read();
}catch (IOException e){
e.printStackTrace();
}
// jdk9以后:
InputStreamReader reader =new InputStreamReader(System.in);
try(reader){
reader.read();
}catch (IOException e){
e.printStackTrace();
}
}
引进HttpClient
无需maven引入
JDK10
局部变量VAR
将前端思想var关键字引入java后段,自动检测所属于类型,一种情况除外,不能为null,因为不能判断具体类型,会报异常。
public static void jdk10Var() {
var number = 10;
var str = "aabbcc";
var list = new ArrayList<>(1);
var map = new HashMap<>(1);
var set = new HashSet<>(1);
}
copyOf方法
在java.util.List/ Set/
Map新增加了一个静态方法copyOf,这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合。但是如果将返回后的集合继续修改,那么报异常。
垃圾收集器的优化
- JDK9:新生代:ParNew收集器。
- 老年代:Parallel Old收集器 JDK10:G1(Garbage-First)全收集器
- JDK10中含有垃圾收集器的可视化工具。在JDK安装目录的bin中 jmc.exe
JDK11
Lambda中使用 var
更多推荐
已为社区贡献1条内容
所有评论(0)