java8 新特性

Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的日期 API,新的Stream API 等。
在Java SE 8中,添加了新类,并且增强了现有类以利用lambda表达式和Stream 。 您可以在以下包中找到大多数这些新类和增强类:

修改的包:
这里列出了诸如 BooleanInteger, 其他基本类型的对象包装类 (参见Autoboxing 和 Unboxing) ,因为它们已经被增强,更加适合方法引用。例如, 你可以使用方法 Integer.sum作为方法引用, 如下所示,显示将集合中的整数相加:

Integer[] intArray = {1, 2, 3, 4, 5, 6, 7, 8 };
List<Integer> listOfIntegers =
    new ArrayList<>(Arrays.asList(intArray));
    System.out.println("Sum of integers: " +
        listOfIntegers
            .stream()
            .reduce(Integer::sum).get());

Note : 你也可以使用IntStream.sum将集合中的整数相加。

新增类修改过的类
java.ioUncheckedIOExceptionBufferedReader
java.langAutoCloseable
ThreadLocal
String
Iterable
CharSequence
Boolean
Integer
Long
Float
Double
java.nio.fileFiles
java.utilPrimitiveIterator
Spliterator
DoubleSummaryStatistics
IntSummaryStatistics
LongSummaryStatistics
Optional
OptionalDouble
OptionalInt
OptionalLong
Spliterators
SplittableRandom
StringJoiner
Arrays
BitSet
Collection
Comparator
Iterator
List
Map
Map.Entry
LinkedHashMap
Random
TreeMap
java.util.concurrentThreadLocalRandom
java.util.jarJarFile
java.util.zipZipFile
java.util.loggingLogger
java.util.regexPattern

#新特性
Java8 新增了非常多的特性,我们主要讨论以下几个后台开发常用的特性:

  • Lambda 表达式 − Lambda允许把函数作为一个方法的参数。允许更简洁的表达单接口方法的实例。

  • 方法引用 − 方法引用为已经具有名称的方法提供易于阅读的lambda表达式。。

  • 默认方法 − 默认方法允许在库的接口中添加一个default的实现方法,并确保与为这些接口的旧版本编写的代码的二进制兼容性。

  • Stream API −新的java.util.stream包中的类提供了一个Stream API,以支持对元素流的功能样式操作。 Stream API集成到Collections API中,可以对集合进行批量操作,例如顺序或并行map-reduce转换。

  • Date Time API − 一组新的包,提供全面的日期时间模型。

  • Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。

更多的新特性可以参阅官网:What’s New in JDK 8

#为什么需要使用Java8
1996 年 1 月,Java 1.0 发布,此后计算机编程领域发生了翻天覆地的变化。商业发展需要 更复杂的应用,大多数程序都跑在功能强大的多核 CPU 的机器上。带有高效运行时编译 器的 Java 虚拟机(JVM)的出现,使程序员将更多精力放在编写干净、易于维护的代码 上,而不是思考如何将每一个 CPU 时钟周期、每字节内存物尽其用。

多核 CPU 的兴起成为了不容回避的事实。涉及锁的编程算法不但容易出错,而且耗费时 间。人们开发了 java.util.concurrent 包和很多第三方类库,试图将并发抽象化,帮助程 序员写出在多核 CPU 上运行良好的程序。很可惜,到目前为止,我们的成果还远远不够。

开发类库的程序员使用 Java 时,发现抽象级别还不够。处理大型数据集合就是个很好的例 子,面对大型数据集合,Java 还欠缺高效的并行操作。开发者能够使用 Java 8 编写复杂的 集合处理算法,只需要简单修改一个方法,就能让代码在多核 CPU 上高效运行。为了编写 这类处理批量数据的并行类库,需要在语言层面上修改现有的 Java:增加 Lambda 表达式。

当然,这样做是有代价的,程序员必须学习如何编写和阅读使用 Lambda 表达式的代码, 但是,这不是一桩赔本的买卖。与手写一大段复杂、线程安全的代码相比,学习一点新语 法和一些新习惯容易很多。开发企业级应用时,好的类库和框架极大地降低了开发时间和 成本,也为开发易用且高效的类库扫清了障碍。

对于习惯了面向对象编程的开发者来说,抽象的概念并不陌生。面向对象编程是对数据进 行抽象,而函数式编程是对行为进行抽象。现实世界中,数据和行为并存,程序也是如 此,因此这两种编程方式我们都得学。

这种新的抽象方式还有其他好处。不是所有人都在编写性能优先的代码,对于这些人来 说,函数式编程带来的好处尤为明显。程序员能编写出更容易阅读的代码——这种代码更 多地表达了业务逻辑的意图,而不是它的实现机制。易读的代码也易于维护、更可靠、更不容易出错。

在写回调函数和事件处理程序时,程序员不必再纠缠于匿名内部类的冗繁和可读性,函数 式编程让事件处理系统变得更加简单。能将函数方便地传递也让编写惰性代码变得容易, 惰性代码在真正需要时才初始化变量的值。

Java 8 还让集合类可以拥有一些额外的方法:default 方法。程序员在维护自己的类库时, 可以使用这些方法。
总而言之,Java 已经不是祖辈们当年使用的 Java 了,嗯, 这不是件坏事。
(摘抄自【Java 8 函数式编程】)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值