赞
踩
最近在看面向对象设计的书,有了一些新的感悟。于是周末闲来无事,想写个小东西练练手。最近一直用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());
}
}
注意:由于篇幅关系,可能是最重要的改进lambda
、jigsaw
项目等将放在以后单独的文章里学习介绍。
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<?>>>
Java 7中很实用的一个特性就是Switch也支持字符串了,之前我们只能通过大段的if-then-else来实现。而且据说Switch更利于编译器做优化,具体为什么还要研究一下。
switch (type) {
case "Hello": println("Hi!"); break;
case "World": println("Wow!"); break;
default: println(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。