jdk5,7,8,11,17,21版本特性

编程入门 行业动态 更新时间:2024-10-28 10:24:34

jdk5,7,8,11,17,21版本<a href=https://www.elefans.com/category/jswz/34/1769892.html style=特性"/>

jdk5,7,8,11,17,21版本特性

目录

jdk5

基本数据类型自动装箱拆箱

可变参数

增强for

注解

泛型

枚举

概述

定义

常用方法

自定义构造方法

枚举类中的抽象方法

jdk7

二进制字面量

switch

异常

try-with-resources,自动关流

jdk8

Lambda

Stream流

Optional

LocalDate&LocalDateTime

接口增强

jdk11

jdk17

jdk21


jdk5

jdk5是java的标志性版本,提供了众多影响深远的功能,是java质变的版本

基本数据类型自动装箱拆箱

基本数据类型和其包装类的转换,运算,不再需要显式的使用构造方法,intValue()等方式,直接就可以互相运算,赋值

Integer a = 1;
int b = a;
int c = a + b;

可变参数

方法的参数可以不是固定个数,编译器会隐式的使用一个数组去接收参数

注意

可变参数显然只能放在所有参数的最后,因为它会把所有的参数都接收

public static Integer getSum(int ... nums){int sum = 0 ;for(int num : nums){sum += num;}return sum;
}

增强for

对于数组,集合,不再需要通过角标,迭代器去遍历,极大的简化了操作

for (Integer num : numArr/numList) {System.out.println(num);
}

注解

遍地开花的注解功能也是在jdk5引入

泛型

菱形泛型也是在jdk5引入

枚举

概述

将一类变量的值罗列出来,变量的值只限于列举出来的值的范围内

举例:一周7天,一年12个月

定义

public enum GenderEnum {GENDER_0,GENDER_1;
}

常用方法

E.values(); 获取枚举值数组,values()是编译器提供的方法,并不是枚举类本身携带的方法,这并不妨碍我们使用

E.valueOf("MONDAY"); 获取指定枚举值

自定义构造方法

简单的枚举类显然没办法满足我们的业务需求,因为我们不大可能把这些字段都定义为枚举类型,因此需要通过自定义构造丰富枚举的使用

public enum GenderEnum {GENDER_0("0", "女"),GENDER_1("1", "男");private String key;private String val;//自定义构造private GenderEnum(String key, String val) {this.key = key;this.val = val;}//通过key获取valpublic static String toVal(String k) {GenderEnum [] ems = values();for (GenderEnum e : ems) {if(e.k().equals(k)) {return e.v();}}return null;}//通过val获取keypublic static String toKey(String v) {GenderEnum [] ems = values();for (GenderEnum e : ems) {if(e.v().equals(v)) {return e.k();}}return null;}public static Integer toIntKey(String v) {GenderEnum [] ems = values();for (GenderEnum e : ems) {if(e.v().equals(v)) {return Integer.parseInt(e.k());}}return null;}public static Map<String,String> toMap() {return Arrays.stream(values()).collect(Collectors.toMap(GenderEnum::k, GenderEnum::v));}//获取keypublic String k() {return key;}//获取valpublic String v() {return val;}
}

枚举类中的抽象方法

枚举类中可以定义抽象方法,那么每个枚举值都要重写该方法,通常不会特别的使用

枚举还提供了专用的EnumMap,EnumSet,但通常也不会特别使用它们

public enum GenderEnum {GENDER_1("1", "男") {@Overridepublic String getString() {return "男-字符串";}};//抽象方法public abstract String getString();private String key;private String val;private RoleEnum(String key, String val) {this.key = key;this.val = val;}

jdk7

二进制字面量

在二进制数前面加上0b,0B标记这是一个二进制数

System.out.println(0b110);

switch

case语句可以用String类型进行匹配,是的没错,jdk7以前case表达式不可以用String类型

String month = "1";
switch (month) {case "1":return "一月";case "2":return "二月";default:return null;
}

异常

多个catch可以合并到一个处理体,异常用 | 符号间隔

try {...
} catch (NoSuchFieldException | IllegalAccessException e) {...
} finally {...
}

try-with-resources,自动关流

使用该方式,不再需要手动close()关流

//不需要手动关流,代码块执行完会自动关流,可以声明多个流
try(InputStream inputStream = file.getInputStream();InputStream inputStream2 = file2.getInputStream()) {...inputStream1...inputStream2...
}//如果手动关流
try {InputStream inputStream = file.getInputStream()...
} catch(Exception e) {...
} finally {...if(inputStream != null) {inputStream .close();}
}

jdk8

Lambda

Stream流

Optional

LocalDate&LocalDateTime

接口增强

jdk11

var变量定义

1.命令行中支持源文件(.java文件)直接运行,不再需要手动javac命令

2.FileInputStream增强

fis.transferTo(fos);

3.File快速读写String

Path pathRead = ...;

String text = Files.readString(pathRead);

Path pathWrite = ...;

Files.writeString(pathWrite, "...");

4.String类型新方法

str.isBlank(); //trim后是否为空

str.lines(); //按照终止符分割为stream流

str.strip();

str.stripLeading();

str.stripTrailing();

str.repeat(num); //复制num次,组成新的字符串

5.Stream功能拓展

截止结算

takeWhile(),从集合中取出满足条件的元素,直到不满足条件

dropWhile(),从集合中移除满足条件的元素,直到不满足条件

从单个数据构造流

Stream.ofNullable(null);

Optionals可以直接转为Stream

Optional.of("foo").stream();

6.集合转数组

List sampleList = Arrays.asList("张三", "java 11");

// array = {"张三", "java 11"};

String[] array = sampleList.toArray(String[]::new);

6.全新的垃圾回收器ZGC

ZGC的优势:

GC暂停时间不会超过10毫秒

既能处理几百兆的小堆,也能处理几个T的大堆

和G1相比,应用吞吐能力不会下降超过15%

为未来的GC功能和利用colord指针以及Load barriers优化奠定了基础

ZGC是一个并发、基于region、压缩型的垃圾收集器,只有root扫描阶段会STW(strop the world,停止所有线程),因此ZGC的停顿时间不会随着堆的增长和存活对象的增长而变长。

用法:-XX:UnlockExperimentalVMOptions -XX:+UseZGC2

jdk17

jdk21

更多推荐

jdk5,7,8,11,17,21版本特性

本文发布于:2023-11-15 01:19:43,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1591146.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:特性   版本

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!