那些年我错过的Java

本文回顾了Java 8到Java 10的一些重要特性,包括类型推断、字符串改进、异常处理、面向对象设计的增强、Optional的引入、集合类初始化的便捷性提升,以及新库如NIO 2、JodaTime和JSON支持。此外,还介绍了Java 9的JShell、多语言风格融合和JVM性能的改进,如PermGen的移除和G1成为默认GC。
摘要由CSDN通过智能技术生成

最近在看面向对象设计的书,有了一些新的感悟。于是周末闲来无事,想写个小东西练练手。最近一直用Python,所以想回归一下更面向对象、更“静态”一些的Java。正研究怎么升级到Java 9尝尝鲜,结果发现再有80天Java 11都要发布了!真是山中方一日,世上已千年。才不关注Java没多久,已经快成版本帝了。索性直接上了Java 10,把最近落下的都补上。在这个夏天,补上那些年我错过的Java。

在开始之前要做的当然就是升级到最新版本,这是在Linux(Mint)上通过PPA的方式安装最新版本Java的命令:

$ sudo add-apt-repository ppa:linuxuprising/java
$ sudo apt update
$ sudo apt install oracle-java10-installer
$ sudo apt install oracle-java10-set-default

本文所有例子都可以通过测试类main方法跑起来,只额外封装了一个打印到控制台的println,编译运行javac Test.java && java Test即可。当然,也可以玩一下Java 9提供的JShell,通过/set feedback verbose在每条命令后能够看到更多信息。

public class Test {
   
    public static final void main(String[] args) {
        //...
    }

    private static void println(Object obj) { 
        System.out.println(obj.toString());
    }
}

注意:由于篇幅关系,可能是最重要的改进lambdajigsaw项目等将放在以后单独的文章里学习介绍。


1.语言特性增强

1.1 类型推断

Java很恼人的一点就是泛型,的确强制声明类型更加严谨和安全。然而在构建复杂数据类型时,代码会变得非常丑陋。Java 7试图改善这一问题,允许我们省略具体类型而让编译器自己去推断,还很形象地为其取名叫做Diamond Operator(钻石操作符)。

Map<String, List<String>> employeeGroupByAge = new HashMap<>();

Java 10中又进一步地让编译器变得更加聪明,引入了var关键字,让编译器自动推断本地变量的类型。

var employeeGroupByAge = new HashMap<>();
employeeGroupByAge.put(25, List.of("Allen", "Hank"));
employeeGroupByAge.put(30, List.of("Carter"));
println(employeeGroupByAge); //{25=[Allen, Hank], 30=[Carter]}

从下面JShell的输出可以看出,Java已经足够聪明了,能够推断出甚至比人为声明更为精细的类型。

jshell> var list = List.of(1, 2.0, "3");
list ==> [1, 2.0, 3]
|  modified variable list : List<Serializable&Comparable<? extends Serializable&Comparable<?>>>
|    update overwrote variable list : List<Serializable&Comparable<? extends Serializable&Comparable<?>>>

1.2 字符串

Java 7中很实用的一个特性就是Switch也支持字符串了,之前我们只能通过大段的if-then-else来实现。而且据说Switch更利于编译器做优化,具体为什么还要研究一下。

switch (type) {
    case "Hello": println("Hi!"); break;
    case "World": println("Wow!"); break;
    default: println(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值