java 8代码 改 java7_Java 8 到 Java 14,改变了哪些你写代码的方式?
前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性。
其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些。
Lambda表达式
Lambda 表达式是 Java 8 中最重要的一个新特性,Lambda 允许把函数作为一个方法的参数。
lambda 表达式的语法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
如以下例子:
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
Lambda表达式具有简洁、容易进行并行计算、是未来的编程趋势等优点,但同时也会带来调试困难,新人理解成本高等缺点。
Streams API
除了Lambda 表达式外,Java 8中还引入了Stream API,这使得Java终于进入到函数式编程的行列中来了。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
如下图,就是通过Stream API对集合进行了一系列的操作:
List strings = Arrays.asList("Hollis", "HollisChuang", "hollis", "Hello", "HelloWorld", "Hollis");
Stream s = strings.stream().filter(string -> string.length()<= 6).map(String::length).sorted().limit(3)
.distinct();
而且,Stream还支持并行流,在性能上比传统的for循环要好很多。(详细用法:《Java 8中处理集合的优雅姿势——Stream》)
从Lambda表达式和Stream API问世至今,已经有6年的时间了,相信很多人已经在工作中使用过这些特性了。
虽然对于这两种语法的使用,很多人持有不同的看法,但是作者还是认为这个功能是十分好用的,只是在日常写代码的时候不要过分"炫技"使用超长的流式操作,代码可读性不要太低就可以了。
新的日期和时间 API
在Java 8之前,日期时间 API 存在诸多问题,如:Date非线程安全、java.util和java.sql的包中都有日期类、日期类并不提供国际化,没有时区支持。
所以,Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
常见操作如下:
// 获取当前的日期时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("当前时间: " + currentTime);
// 时间比较
LocalDate today = LocalDate.now();
LocalDate date1 = LocalDate.of(2014, 01, 14);
if(date1.equals(today)){}
// 时间增加
LocalTime time = LocalTime.now();
LocalTime newTime = time.plusHours(2); // adding two hours
但是说实话,Java8中的时间API作者日常工作中用的比较少,主要是有很多历史代码,还是依赖Date等类型,使用新的API就要面临互相转换问题。
本地变量类型推断
在Java 10之前版本中,我们想定义定义局部变量时。我们需要在赋值的左侧提供显式类型,并在赋值的右边提供实现类型:
MyObject value = new MyObject();
在Java 10中,提供了本地变量类型推断的功能,可以通过var声明变量:
var value = new MyObject();
本地变量类型推断将引入“var”关键字,而不需要显式的规范变量的类型。
其实,所谓的本地变量类型推断,也是Java 10提供给开发者的语法糖。虽然我们在代码中使用var进行了定义,但是对于虚拟机来说他是不认识这个var的,在java文件编译成class文件的过程中,会进行解糖,使用变量真正的类型来替代var(我反编译了Java 10的本地变量类型推断)
Switch 表达式
在JDK 12中引入了Switch表达式作为预览特性。并在Java 13中修改了这个特性,引入了yield语句,用于返回值。
而在之后的Java 14中,这一功能正式作为标准功能提供出来。
在以前,我们想要在switch中返回内容,还是比较麻烦的,一般语法如下:
int i;
switch (x) {
case "1":
i=1;
break;
case "2":
i=2;
break;
default:
i = x.length();
break;
}
在JDK13中使用以下语法:
int i = switch (x) {
case "1" -> 1;
case "2" -> 2;
default -> {
int len = args[1].length();
yield len;
}
};
或者
int i = switch (x) {
case "1": yield 1;
case "2": yield 2;
default: {
int len = args[1].length();
yield len;
}
};
在这之后,switch中就多了一个关键字用于跳出switch块了,那就是yield,他用于返回一个值。和return的区别在于:return会直接跳出当前循环或者方法,而yield只会跳出当前switch块。
Text Blocks
Java 13中提供了一个Text Blocks的预览特性,并且在Java 14中提供了第二个版本的预览。
text block,文本块,是一个多行字符串文字,它避免了对大多数转义序列的需要,以可预测的方式自动格式化字符串,并在需要时让开发人员控制格式。
我们以前从外部copy一段文本串到Java中,会被自动转义,如有一段以下字符串:
Hello, world
将其复制到Java的字符串中,会展示成以下内容:
"
" +
"
" +
"
Hello, world
" +
"
" +
"
";
即被自动进行了转义,这样的字符串看起来不是很直观,在JDK 13中,就可以使用以下语法了:
"""
Hello, world
""";
使用"""作为文本块的开始符合结束符,在其中就可以放置多行的字符串,不需要进行任何转义。看起来就十分清爽了。
如常见的SQL语句:
String query = """
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = "INDIANAPOLIS"
ORDER BY `EMP_ID`, `LAST_NAME`;
""";
看起来就比较直观,清爽了。
Records
Java 14 中便包含了一个新特性:EP 359: Records,
Records的目标是扩展Java语言语法,Records为声明类提供了一种紧凑的语法,用于创建一种类中是“字段,只是字段,除了字段什么都没有”的类。通过对类做这样的声明,编译器可以通过自动创建所有方法并让所有字段参与hashCode()等方法。这是JDK 14中的一个预览特性。
使用record关键字可以定义一个记录:
record Person (String firstName, String lastName) {}
record 解决了使用类作为数据包装器的一个常见问题。纯数据类从几行代码显著地简化为一行代码。(详见:Java 14 发布了,不使用”class”也能定义类了?还顺手要干掉Lombok!)
总结
以上,就是从Java 8 到 Java 14中,新推出的可能会影响开发人员写代码的方式的一些主要特性。
不知道大家有没有发现,最近几个版本中推出的一些功能,使得Java和Kotlin等语言越来越像了...
新的这些功能,确实在一定程度上可以简化一些代码,使得开发过程中更加高效,但是说实话,还没有好到足够吸引广大开发者抛弃Java 8进行大规模迁移!
还是那句话:版本任你发,我用Java 8;但是新特性我们还是要去了解下的。
本文由博客一文多发平台 OpenWrite 发布!
java 8代码 改 java7_Java 8 到 Java 14,改变了哪些你写代码的方式?相关推荐
- Java 8 到 Java 14,改变了哪些你写代码的方式?
前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性. 其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些. La ...
- java update 8_版本任你发,我用Java 8!JDK的更新,改变了哪些你写代码的方式?...
前几天,JDK 14 正式发布了,这次发布的新版本一共包含了16个新的特性. 其实,从Java8 到 Java14 ,真正的改变了程序员写代码的方式的特性并不多,我们这篇文章就来看一下都有哪些. La ...
- Arduino终于支持代码补全了!小白们终于可以愉快的写代码了!Arduino IDE 2.0beta功能简介...
Arduino终于支持代码补全了!小白们终于可以愉快的写代码了!Arduino IDE 2.0beta功能简介 前一段时间听到有人说Arduino的IDE特别不好用,功能太单一,最重要的是没有代码补全 ...
- 这可能就是写代码的乐趣吧,你,也一定会爱上写代码的!
" 大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂. " 现在是:2021年10月23日22:02:41. 于我来说,最感兴趣的莫过于上课和写代码了.最近一下在做一个项目,可能 ...
- 用c语言写代码_教你如何用android mvp分层架构优雅写代码
背景 看了好多android技术博客,写android分层架构的博客越来越多,有mvc.mvp.mvvm.clean等各式各样的,而mvp异常火热,然而每个人对mvp的定义又是不同,写法自然也是千紫万 ...
- 写代码用什么笔记本_1—2千预算,编程、写代码、办公、PS修图笔记本推荐/选购指南...
程序员老鸟都说,学编程任何电脑都可以,有屏幕能打字就行.用记事本都能写. 一哥认为,如果大一大二学基础,学算法,数据结构,学习相关的软件/框架使用,又不用跑大的IDE,服务器,虚拟机,编程语言只是写写 ...
- 当我们的代码遇到问题的时候....;要想不遇到问题,写代码的时候要.....
当我们的代码遇到问题的时候: 1,不要怨天怨地.出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了. 2,要掌握工具. ...
- Java项目如何改成maven_普通java项目改进为maven:ecplise
首先:项目上右击->configure->Convert to Maven Project 将项目转化为maven项目. 或者在.project文件中natures节添加 org.ecli ...
- java单击按钮切换图片_JAVA点击按钮改变背景图片 跪求代码·
展开全部 // 不加包,图片跟类文件在62616964757a686964616fe4b893e5b19e31333262383634一个目录,命令行下编译执行就行了 // 如果建工程,图片放到工程根 ...
最新文章
- Android怎么隐藏前端,Android-Webview支持缩放并掩藏讨厌的缩放控制条
- java后台post请求调用接口
- Linux系统服务器如何禁ping
- 3·15,你“信”了吗
- 谷歌浏览器出现方格xp系统_win10系统谷歌浏览器扩展程序打不开的解决方案
- js中onload和jQuery中的ready区别
- 【机器视觉】 fuzzy_measure_pairs算子
- 这就是数据分析之numpy
- golang切片转为字符串,字符串转切片
- 初入java行业,环境你可知如何配置
- 风险预测模型_【期刊导读】长期NA治疗的慢乙肝患者也有专属肝癌风险预测模型...
- JEECG(三) JEECG minidao如何封装自己的 多表联合查询 分页查询
- 【转】Git连接oschina管理代码版本
- VS C++改变窗体背景色
- 《运算放大器权威指南(Op Amps for Everyone)》读书笔记(一)
- oracle短表和长表的区别,人口普查长表哪些人填和短表有什么区别
- chm 打不开 解决办法
- 做图像处理的必备图库
- 关于--如何查看外网IP地址
- 建立KMS服务器,激活WIN、office
热门文章
- Windows句柄-2
- 汇编语言中MOV和OFFSET指令的两个问题?
- C++回调机制的几种实现方式
- C# 通过socket实现UDP 通信
- Python—实训day3—简单的在线翻译程序
- swift5以上版本的代理的实现,详细教你书写代理
- mysql schedule every_Mysql 架构及优化之-定时计划任务
- mysql怎么把字符变成数字_mysql将字符转换成数字
- mysql left/right join算法效率分析_mysql left join,right join,inner join超详细用法分析
- arc.archives.class.php关于分页错位怎么修改,解决织梦分页错位的办法