数字文字绝对是对眼睛的一种考验。我相信,如果你给了一个数字,比如说,十个零,你就会像我一样数零。如果不计算从右到左的位置,识别一个文字的话,就很容易出错,而且很麻烦。Not anymore。Java在识别位置时引入了下划线。例如,您可以声明1000,如下所示:
int thousand = 1_000;
或1000000(一百万)如下:
int million = 1_000_000
请注意,这个版本中也引入了二进制文字-例如“0b1”-因此开发人员不必再将它们转换为十六进制。
改进的异常处理
在异常处理区域有几处改进。Java引入了多个catch功能,以使用单个抓到块捕获多个异常类型。
假设您有一个方法,它抛出三个异常。在当前状态下,您将分别处理它们,如下所示:
publicvoidoldMultiCatch() {try{
methodThatThrowsThreeExceptions();
}catch(ExceptionOne e) {//log and deal with ExceptionOne
}catch(ExceptionTwo e) {//log and deal with ExceptionTwo
}catch(ExceptionThree e) {//log and deal with ExceptionThree
}
}
在一个catch块中逐个捕获一个连续的异常,看起来很混乱。我还看到了捕获十几个异常的代码。这是非常低效和容易出错的。Java为解决这只丑小鸭带来了新的语言变化。请参阅下面的方法oldMultiCatch方法的改进版本:
publicvoidnewMultiCatch() {try{
methodThatThrowsThreeExceptions();
}catch(ExceptionOne | ExceptionTwo |ExceptionThree e) {//log and deal with all Exceptions
}
}
多个异常通过使用 “|”操作符在一个catch块中捕获。这样,您不必编写数十个异常捕获。但是,如果您有许多属于不同类型的异常,那么您也可以使用“多个catch块”块。
New file system API(NIO 2.0)
那些使用Java的人可能还记得框架引起的头痛。在操作系统或多文件系统之间无缝地工作从来都不是一件容易的事情.。有些方法,例如删除或重命名,在大多数情况下都是出乎意料的。使用符号链接是另一个问题。实质上API需要大修。
为了解决上述问题,Java引入了一个新的API,并在许多情况下引入了新的api。
在NIO2.0提出了许多增强功能。在处理多个文件系统时,它还引入了新的类来简化开发人员的生活。
Working With Path(使用路径)
新的 java.nio.file 由包和接口组成。例如:Path,Paths,FileSystem,FileSystems等等。
路径只是对文件路径的简单引用。它与java.io.File等价(并具有更多的特性)。下面的代码段显示了如何获取对“临时”文件夹的路径引用:
public voidpathInfo() {
Path path= Paths.get("c:\Temp\temp");
System.out.println("Number of Nodes:"+path.getNameCount());
System.out.println("File Name:"+path.getFileName());
System.out.println("File Root:"+path.getRoot());
System.out.println("File Parent:"+path.getParent());
}
最终控制台的输出将是:
Number of Nodes:2File Name:temp.txt
File Root:c:
File Parent:c:Temp
删除文件或目录就像在文件中调用delete方法(注意复数)一样简单。在类公开两个删除方法,一个抛出NoSuchFileException,另一个不抛。
下面的delete方法调用抛出NoSuchFileException,因此您必须处理它:
Files.delete(path);
使用 Files.deteleIfExists(path) 则不会抛出异常。
您可以使用其他实用程序方法,例如Files.copy(.)和Files.move(.)来有效地对文件系统执行操作。类似地,使用 createSymbolicLink(..) 方法使用代码创建符号链接。
文件更改通知
JDK 7中最好的改善算是File change notifications(文件更改通知)了。这是一个长期等待的特性,它最终被刻在NIO 2.0中。WatchService API 允许您在对主题(目录或文件)进行更改时接收通知事件。
Fork and Join(Fork/Join框架)
在一个java程序中有效地使用并行内核一直是一个挑战。很少有国内开发的框架将工作分配到多个核心,然后加入它们来返回结果集。Java已经将这个特性作为Fork/Join框架结合了起来。
基本上,在把手头的任务变成了小任务,直到小任务简单到可以不进一步分手的情况下解决。这就像一个分而治之的算法.。在这个框架中需要注意的一个重要概念是,理想情况下,没有工作线程是空闲的。他们实现了一个 work-stealing 算法,在空闲的工人“偷”工作从那些工人谁是忙。
支持Fork-Join机制的核心类是ForkJoinPool和ForkJoinTask。