当前位置: 首页 > article >正文

java——学习并推荐java8

学习并推荐java8

  • 为什么要学习java8
  • 我推荐使用lambda

Java 8的核心新特性:Lambda(匿名函数)、流、默认方法。
Java 8于2019年1月停止「免费维护」,java的生态已经发生翻天覆地的变化,应该努力拥抱变化,才能避免被时代淘汰。

为什么要学习java8

  1. Java 8所做的改变,在许多方面比Java历史上任何一次改变都深远。这些改变会让你编起程来更容易,代码更简洁。

  2. Java 8提供了一个新的API(称为“流”,Stream),它支持许多处理数据的并行操作。

  3. Java 8中把函数视为值的一种新形式(方法和Lambda作为一等公民)。Java8之前的程序可操作两大类值:基本类型(int double等)、对象(更严格地说是对象的引用)。编程语言的整个目的就在于操作值,要是按照历史上编程语言的传统,这些值因此被称为一等值(或一等公民,这个术语是从20世纪60年代美国民权运动中借用来的)。编程语言中的其他结构也许有助于我们表示值的结构,但在程序执行期间不能传递,因而是二等公民。前面所说的值是Java中的一等公民,但其他很多Java概念(如方法和类等)则是二等公民。用方法来定义类很不错,类还可以实例化来产生值,但方法和类本身都不是值。但人们发现,在运行时传递方法能将方法变成一等公民,这在编程中非常有用,因此Java 8的设计者把这个功能加入到了Java中。Java 8允许“把代码传递给方法”,这种方式简洁地表达了行为参数化。比方说,你想要写两个只有几行代码不同的方法,那现在你只需要把不同的那部分代码作为参数传递进去就可以了。采用这种编程技巧,代码会更短、更清晰,也比常用的复制粘贴更不容易出错。虽然Java 8之前可以用匿名类实现行为参数化,但Java 8代码更加简洁、可读性更好。Java 8里面将代码传递给方法的功能(同时也能够返回代码并将其包含在数据结构中)还让我们能够使用一整套新技巧,通常称为函数式编程。这种被函数式编程界称为函数的代码,可以被来回传递并加以组合,以产生强大的编程语汇。

  4. Java 8中加入默认方法。如在Java 8之前,List并没有stream或parallelStream方法,它实现的Collection接口也没有。最简单的解决方案就是让Java 8的设计者把stream方法加入Collection接口,并加入ArrayList类的实现。但有很多的替代集合框架都用Collection API实现了接口。但给Collection接口加入一个新方法,意味着所有的实体类都必须为其提供一个实现,否则代码就不能编译。java8中,若实现类未对接口中的方法签名提供实现,那么缺失的方法主体由接口提供了(因此就有了默认实现),而不是由实现类提供,从而不会破坏现有的代码。

  5. Java 8对硬件也有影响。平常我们用的CPU都是多核的(可能有四个CPU内核,甚至更多)。但是,绝大多数现有的Java程序都只使用其中一个内核,其他三个都闲着。在Java 8之前,我们必须利用线程才能使用多个内核。问题是,线程用起来很难,也容易出现错误。从Java的演变路径来看,它一直致力于让并发编程更容易、出错更少。Java 1.0里有线程和锁,甚至有一个内存模型——这是当时的最佳做法。Java 5添加了工业级的构建模块,如线程池和并发集合。Java 7添加了分支/合并(fork/join)框架,使得并行变得更实用,但仍然很困难。在大数据时代,程序员越来越多地要处理所谓的大数据(数百万兆甚至更多字节的数据集),并希望利用多核计算机或计算集群来有效地处理。java8的并行流顺应时代潮流。

  6. 在Java 8里有一个Optional类,可以帮助你避免出现NullPointer异常。它是一个容器对象,可以包含,也可以不包含一个值。Optional中有方法来明确处理值不存在的情况,这样就可以避免NullPointer异常了。

我推荐使用lambda

很多人不喜欢用lambda表达式,他们认为lambda仅仅是语法糖,造成代码不容易维护、不容易debug、一旦报错很难从lambda的一连串的链式操作中定位等问题。这其实是没有正确的使用lambda造成的。我推荐使用lambda的原因如下:

  1. 语法更易读,更简洁的代码;

  2. 并行流提高效率,解决高并发更难的问题;

  3. 不能认为lambda仅仅是语法糖。 为什么不说java是二进制指令的语法糖?

  4. lambda也容易debug。 不会可以百度查。

  5. lambda表达式最好多行写,一个操作符占一行。 若多个操作写在同一行,报错后仅根据报错的行号不好定位问题。


http://www.kler.cn/a/232495.html

相关文章:

  • 「人眼视觉不再是视频消费的唯一形式」丨智能编解码和 AI 视频生成专场回顾@RTE2024
  • 【LeetCode】每日一题 2024_11_14 统计好节点的数目(图/树的 DFS)
  • 卷积、频域乘积和矩阵向量乘积三种形式之间的等价关系与转换
  • 华为路由策略配置
  • 任何使用 Keras 进行迁移学习
  • LabVIEW大数据处理
  • 猫头虎分享已解决Bug :内存泄漏(Memory Leak)
  • Kubernetes实战(二十七)-HPA实战
  • Web Services 服务 是不是过时了?创建 Web Services 服务实例
  • 【Linux】SystemV IPC
  • CTFshow web(命令执行 41-44)
  • WPF 中 Loaded 和 Closing 窗口事件
  • K210如何下载程序
  • LDAR管理系统解决方案
  • 90.Go语言中实现可选参数的几种方法:可变长参数、使用Map、结构体和函数选项模式
  • macbookpro和macbookair的区别?cleanmymac 怎么清理mac空间
  • sqlite3数据库操作接口详细整理,以及常用的数据库语句
  • vscode debug无法直接查看eigen变量的问题(解决方法)
  • 2402d,d的静态构造器
  • CSS之盒子模型
  • HttpClient | 支持 HTTP 协议的客户端编程工具包
  • 【机器学习】合成少数过采样技术 (SMOTE)处理不平衡数据(附代码)
  • 懒人精灵 之 Lua 捕获 json解析异常 ,造成的脚本停止.
  • 在Python中读写Kafka队列
  • Qt应用软件【协议篇】TCP示例
  • RPC技术分享