您的位置:首页 > 编程语言 > Java开发

《写给大忙人看的java SE8》笔记 -- 3. 杂项改进与java7新特性

2015-08-01 22:02 597 查看

时间和日期改进

所有的java.time对象都是不可变的
Instant是时间线上的一个点;Duration是两个Instant之间的时间差;Period类似Duration,考虑到了夏令时,适用于带时区的时间
无闰秒,每天都是86400秒
LocalDateTime没有时区信息,ZonedDateTime是时区中的一个时间点
DateTimeFormatter用来格式化
TemporalAdjuster可以处理复杂的日期计算,比如找到某个月的第一个星期二

并发增强

通过lambda表达式,以前的非原子操作现在变得简单了,比如要更新一个AtomicLong对象为最大值,以前的代码为:

do {
oldValue = largest.get();
newValue = Math.max(oldValue, observed);
} while(!largest.compareAndSet(oldValue, newValue));

新的代码可以写成
largest.updateAndGet(x -> Math.max(x, observed))


LongAdder和LongAccumulator内部使用了多个变量记录数值,加起来便得到总和,在激烈竞争的条件下,比AtomicLong效率更高。

CompletableFuture类似于Optional对象,可以通过lambda表达式指定后续操作,返回一个新的CompletableFuture对象。

其他

Objects类添加了静态函数isNull和nonNull,可以用在Stream。

String提供了join函数。

数字类添加了sum, max, min等方法,可与与Stream配合使用。Byte.toUnsignedInt(b)可以得到无符号数字。Math类添加了addExact等方法,会在越界时抛出异常。

Comparator接口添加了新的方法,可以将多个比较器组合起来。并且添加了nullFirst和nullLast静态方法。

Files.lines和BufferedReader都会生成一个Stream,往往需要配合try-with-resources语法确保流的关闭:
try(Stream<String> lines = Files.lines(path)) { ... }
。Files.walk可以递归遍历目录。

正式添加了Base64类。

注解类可重复,并且可被应用于类型。

正则表达式可以命名捕获组,添加了splitAsStream和asPredicate等方法。

值得注意的java7特性

异常处理

try(Resource res = ...) { 使用res }
Resource类必须实现AutoCloseable接口,会被自动关闭。也可以使用多个资源
try(Resource1 res1 = ...; Resource2 res2=...) {}


使用过程中如果发生了异常,并且close时又发生了异常,则原来的异常会被抛出,close的异常被标记为suppressed。可以通过ex.getSuppressed()取得被压制的异常。

捕获多个异常catch(FileNotFoundException | UnknownHostException ex),ex到底是什么类型呢?书里没说。

文件操作

Path类与File类似,但是可以由多段组成。Files类提供了读写文件的便利方法,可以创建文件和目录,可以复制、移动和删除文件。

增强的基础功能

Objects.equals(a, b)
会在a和b都为null时返回true。
Objects.hash(a, b)
会自动将多个对象的hashCode组合起来。Integer添加了compare(a,b)静态方法,不用担心溢出。

钻石操作符

可在构造函数里自动进行泛型推导,如
List primes = new ArrayList<>(); Map<String, List> employeeRecords = new HashMap<>();


其它

Integer.paseInt("+1")不会再报错,在此之前整数前面有加号会报错。

全局Logger:Logger.getGlobal()。

Objects.requireNonNull(a)可以用于null检查,抛出NullPointerException。

ProcessBuilder可以将输入输出重定向到文件,也可以通过inheritIO继承java的标准输出输出。

Java 8?还记得那年大明湖畔的Java 7吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: