JDK5,7,11,17特性

目录

JDK5

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

可变参数

增强for

注解

泛型

枚举

概述

定义

常用方法

自定义构造方法

枚举类中的抽象方法

JDK7

二进制字面量

switch

异常

try-with-resources,自动关流

JDK11

FileInputStream增强

String类增强

Stream流增强

List增强

全新的垃圾回收器ZGC

ZGC的优势

可变类型var

概述

注意点

JDK17

增强型伪随机数发生器

RandomGeneratorFactory

RandomGenerator

强封装JDK的内部API

switch增强

密封类

全面提速


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

jdk8之前最重要的过渡版本

二进制字面量

在二进制数前面加上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();}
}

JDK11

jdk8之后第二个LTS版本,提供了新的垃圾回收期ZGC

FileInputStream增强

FileInputStream可以直接写入FileOutputStream

fis.transferTo(fos);

String类增强

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

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

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

str.strip();

str.stripLeading();

str.stripTrailing();

Stream流增强

截止结算

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

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

从单个数据构造流

Stream.ofNullable(null);
Optional.of("foo").stream();    Optionals可以直接转为Stream

List增强

集合转数组

List<String> sampleList = Arrays.asList("张三", "java 11");
// array = {"张三", "java 11"};
String[] array = sampleList.toArray(String[]::new);

全新的垃圾回收器ZGC

ZGC的优势

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

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

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

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

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

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

可变类型var

概述

允许使用var作为变量定义时的类型声明

var x = 10;

注意点

要在定义时进行初始化

var x;
x = "var";        //编译时提示无法推断类型

类型无法互相兼容

var x = 10;
x = "var";        //提示类型不兼容

成员变量无法使用

增强for中可以使用var

for(var str : list) {...}

JDK17

springboot3不再兼容低版本的JDK,要求至少为JDK17

这意味着兼容springboot3的其他开源项目也开始要求更高版本的JDK,升级JDK17很有必要

此外,JDK17相比较JDK8,JDK11在性能上明显更好,值得升级

增强型伪随机数发生器

RandomGeneratorFactory

public static Stream> all() 获取可选的随机数算法列表

public static RandomGeneratorFactory of(String name) 获取给定随机数算法的RandomGeneratorFactory

public T create(long seed) 获取给定种子的RandomGenerator

RandomGenerator

default int nextInt(int bound) 获取一个bound范围内的同类型随机数

RandomGeneratorFactory.all().forEach(e->{System.out.println(e.name());
});
//输出
L32X64MixRandom
L128X128MixRandom
L64X128MixRandom
SecureRandom
L128X1024MixRandom
L64X128StarStarRandom
Xoshiro256PlusPlus
L64X256MixRandom
Random
Xoroshiro128PlusPlus
L128X256MixRandom
SplittableRandom
L64X1024MixRandomRandomGeneratorFactory<RandomGenerator> l128X128MixRandom = RandomGeneratorFactory.of("L128X128MixRandom");
RandomGenerator randomGenerator = l128X128MixRandom.create(System.currentTimeMillis());
System.out.println(randomGenerator.nextInt(100));

强封装JDK的内部API

对JDK提供的类进行广泛的强封装,默认情况下,开发者不再能通过反射访问非公有成员

switch增强

实际上,JDK8~JDK17之间的版本已经对switch进行了多次增强

从JDK14开始,switch支持lambda编写case语句体,而且可以带返回值

Integer month = 1;
String monthStr = switch (month) {case 1-> "一月";default -> "未知";
};System.out.println(monthStr);

网上很多文档说JDK17给case匹配提供了模式匹配

但经过实际测试,这个功能已经被放到JDK19,当下的JDK17已经无法使用这个功能

Object month = 1d;
switch (month) {case Integer i -> System.out.println("这是Integer");case Double d -> System.out.println("这是Double");default -> System.out.println("未知");
}

密封类

Sealed关键字

一个类被Sealed修饰,将会只允许permits指定的类继承,实现类必须有final或者no-sealed修饰

为什么要用fianl修饰:为了密封类继承的安全性

public sealed class Person permits Student{private String name;
}public final class Student extends Person{}

全面提速

JDK17在代码执行,GC效率上相比JDK8,JDK11都有了明显提升

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/179488.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode - 142. 环形链表 II (C语言,快慢指针,配图)

如果你对快慢指针&#xff0c;环形链表有疑问&#xff0c;可以参考下面这篇文章&#xff0c;了解什么是环形链表后&#xff0c;再做这道题会非常简单&#xff0c;也更容易理解下面的图片公式等。 LeetCode - 141. 环形链表 &#xff08;C语言&#xff0c;快慢指针&#xff0c;…

制造企业需要哪些管理系统?怎么选才最划算?

制造企业需要哪些管理系统&#xff1f;怎么选才最划算&#xff1f; 一般来说&#xff0c;制造企业必须要有的几大业务模块及其对应的业务系统有&#xff1a; 生产计划和控制&#xff1a;生产计划系统、MRP&#xff08;物料需求计划&#xff09;系统、ERP&#xff08;企业资源…

代码随想录图论部分-695. 岛屿的最大面积|1020. 飞地的数量

695. 岛屿的最大面积 题目&#xff1a;给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0&#xff08;代表水&#xff0…

聊聊leetcode可包含重复数字的序列的《47. 全排列 II》中的vis标记函数

1 题目描述&#xff08;字节二面题目&#xff09; 2 代码 class Solution {List<List<Integer>>res;List<Integer>list;boolean[]used;public List<List<Integer>> permuteUnique(int[] nums) {resnew ArrayList<>();listnew ArrayList&l…

list部分接口模拟实现(c++)

List list简介list基本框架list构造函数list_node结构体的默认构造list类的默认构造 push_back()iteartor迭代器迭代器里面的其他接口const迭代器通过模板参数实现复用operator->() insert()erase()clear()析构函数迭代器区间构造拷贝构造operator() list简介 - list可以在…

永磁材料测试系统主要应用

1. 产品特征 永磁材料测试系统装置具有独立的电参量校准功能。采用慢速减幅方式对样品退磁。超宽范围的电流连续稳定调节。磁通计的积分器零漂和霍尔探头的非线性误差影响小。系统配置连续可调双极性磁化电源&#xff0c;方便样品的磁化与退磁。测量B或J&#xff1a;采用B或J线…

Vue3实现 SKU 规格

效果图 1 HTML 基本结构 1.1 遍历 SKU 规格数据 <template><div class"productConten"><div v-for"(productItem, productIndex) in specifications" :key"productItem.name"><div class"productTitle">{…

CUDA安装

在cmd中输入nvidia-smi。显示CUDA Version&#xff1a;12.3&#xff0c;所以只能下载小于等于12.3的版本。如下图&#xff1a; 进这个网址&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 选择一个版本下载。 选择完后之后这样选择&#xff1a; 最后点击下载即…

IDEA软件使用步骤

1.IDEA概述 IDEA全称InelliJ IDEA,是用于java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 集成环境&#xff1a;把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试扽过多种功能综合到一起的开发工具。 下载&#xff1a;https…

群晖Docker(Container Manager)中安装Home Assistant Container

群晖Docker&#xff08;Container Manager&#xff09;中安装Home Assistant Container 不要使用 套件里面的 Home Assistant&#xff0c;不利于后期拓展 方式一&#xff1a; docker run -d --name"home-assistant-1" -v /volume1/docker/homeassistant/config:/c…

docker安装SMQTT

docker安装SMQTT smqtt介绍 官方地址: https://www.smqtt.cc/ 官方文档地址: https://wiki.smqtt.cc/docs/smqtt/ 一款高性能&开源的MQTT服务器&#xff0c;支持单机、容器化、集群部署&#xff0c;支持多种协议&#xff0c;具备低延迟&#xff0c;高吞吐量&#xff0c;…

NSSCTF第12页(2)

[CSAWQual 2019]Unagi 是xxe注入&#xff0c;等找时间会专门去学一下 XML外部实体&#xff08;XXE&#xff09;注入 - 知乎 【精选】XML注入学习-CSDN博客 【精选】XML注入_xml注入例子-CSDN博客 题目描述说flag在/flag下 发现有上传点&#xff0c;上传一句话木马试试 文件…