从Java 9 到 Java 17 新特性梳理
Java 9
新的创建集合的方法
// [1, 2, 3, 4]
List<Integer> integers = List.of(1, 2, 3, 4);
// {1,2,3}
Set<Integer> integerSet = Set.of(1, 2, 3);
// {"hello":"world","hi":"java"}
Map<String, String> hello = Map.of("hello", "world", "hi", "java");
Stream扩展:ofNullable、iterate、takeWhile、dropWhile、Optional扩展
try-with-resources 优化
接口私有方法
引入HttpClient
Java 1
局部变量类型推断 var
java 11
字符串强化:isBlank()、lines()、strip()、repeat(n)
集合转对应类型的数组
List<String> sampleList = Arrays.asList("felord.cn", "java 11");
// array = {"felord.cn", "java 11"};
String[] array = sampleList.toArray(String[]::new);断言取反
Predicate.not()
文件中读写字符串内容更方便
String dir= "C://yourDir";
// 写入文件
Path path = Files.writeString(Files.createTempFile(dir, "hello", ".txt"), "hello java 11");
// 读取文件
String fileContent = Files.readString(path);HttpClient支持HTTP2
java12
字符串缩进
String indent(int n):
当n>0时,会在字符串的每一行开头插入n个空格,字符串整体右移。当n<0时,会在字符串的每一行开头删除n个空格,如果实际的空格数小于n,删除该行所有空格,但是并不会换行。字符串转换
<R> R transform(Function<? super String, ? extends R> f)
String txt = "hello ";
// hello hello
String s = txt.transform(str -> str.repeat(2));基于内容的文件匹配
Files.mismatch(Path,Path)
// 文件对比
Path p1 = Files.createTempFile("file1", "txt");
Path p2 = Files.createTempFile("file2", "txt");
Files.writeString(p1, "felord.cn");
Files.writeString(p2, "felord.cn");
// -1L 二者内容相同
long mismatch = Files.mismatch(p1, p2);Collectors::teeing
数字化格式类CompactNumberFormat
java 13
使用AppCDS的时候,就不在需要这么复杂了
ZGC 可以将未使用的堆内存返回给操作系统
Switch 表达式 (Preview)
int i;
switch (x) {
case "1":
i=1;
break;
case "2":
i=2;
break;
default:
i = x.length();
break;
}int i = switch (x) {
case "1" -> 1;
case "2" -> 2;
default -> {
int len = args[1].length();
yield len;
}
};文本块
String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = 'INDIANAPOLIS'
ORDER BY `EMP_ID`, `LAST_NAME`;
""";
java 14
instanceof模式匹配
//在Java14之前,我们通常的写法如下: Object obj = "程序新视界";
if(obj instanceof String){
String str = (String) obj;
System.out.println("关注公众号:" + str);
} //通过java14的新特性,我们可以简化成如下方式:
Object obj = "程序新视界";
if(obj instanceof String str){
System.out.println("关注公众号:" + str);
}Switch表达式 转正
记录类型(Record Type)的引入
//定义一个Record类型如下:
public record Point(int x, int y) {
} //使用Record操作如下:
Point point = new Point(1,3);
System.out.println(point.x());
System.out.println(point.y());
java16
矢量计算
Record类型在JDK14作为preview,在JDK15处于第二轮preview,在JDK16转正
instanceof的模式匹配在JDK14作为preview,在JDK15作为第二轮的preview,在JDK16转正
jpackage在JDK14引入,JDK15作为incubating工具,在JDK16转正,从jdk.incubator.jpackage转为jdk.jpackage。它支持Linux: deb and rpm、macOS: pkg and dmg、Windows: msi and exe
java17
密封类(接口)(Sealed、permits 修饰符)
总结:java9到java17,常用新特性
创建集合新的方法--9
try-with-resources--9
引入HttpClient--9
字符串强化--11
集合转对应类型的数组--11
Switch 表达式--13-14
模式匹配--14-14
文本块--13-14
记录类型(Record Type)--14-16
最新文章
- C#——传值参数(1)
- 关于引用PagerSlidingTabStrip无法引用的问题
- scala高级内容(一) Case Class
- [terry笔记]物化视图 materialized view基础学习
- TableViewCell自定义分割线
- Yii Framework 开发教程Zii组件-Tabs示例
- Nginx和Apache共存环境下apache获得真实IP
- 元素水平垂直居中(transform,margin,table-cell,jQuery)
- kinect for windows - DepthBasics-D2D详解之三
- 使用C#编写SqlHelper类
- Spring MVC 的文件下载
- 这是一名Java学者关于学习方向的建议
- 翻译:MariaDB DATABASE()
- CCSpriteBatchNode中存放元素的一点理解
- Asp.Net Core 实现谷歌翻译ApI 免费版
- windows 下mysq安装之后的数据恢复案例
- spark mllib prefixspan demo
- Java基础之随机生成数字和字母
- BZOJ3230 相似子串 字符串 SA ST表
- [k8s]docker calico网络&;docker cluster-store
热门文章
- 11.2 Android Studio如何切换主题和更改字体
- 你真的了解JAVA中对象和类、this、super和static关键字吗
- X86寄存器
- VGA设计(原理说明。Verilog代码实现,仿真结果)
- USB转串口参数配置功能
- 在 macOS 上搭建 Flutter 开发环境
- Minimax 社论
- React报错之Property &#39;X&#39; does not exist on type &#39;HTMLElement&#39;
- ToString()格式化输出
- BS架构与CS架构