美文网首页
JAVA新版本有哪些新特性

JAVA新版本有哪些新特性

作者: 外腾湖南 | 来源:发表于2022-03-25 09:50 被阅读0次

    1. Java 11有哪些新特性?

    JAVA 11是Java后第一个长期支持的版本

    String API - isBlank() lines(); repeat()

    File API

    HttpClient加强: 直接创建,也不需要什么依赖包了,HttpClient client = HttpClient.newHttpClient();

    现在 Java 自带了这个 HTTP Client API,我们以后还有必要用 Apache 的 HttpClient 工具包吗;

    Stream加强;

    Lambda局部变量推断:var 自动判断变量类型;

    javac, java, compile first, now you only need java to run the code

    JAVA flight recorder, JVM检查,免费的;

    2. Java 8有哪些亮点:函数接口,方法引用,类型推导以及流式操作

    filter()方法

    orElse()方法

    max()方法

    Record()方法:public record Student(String name, Integer age){}

    Optional

    Optional类有一个isPresent()方法,你可以拿它做一个if-check。但是我们由更简短的方法——ifPresent()

    findFirst()

    distinct();  //去重

    limit(3);

    skip(2);

    readString()

    String text = Files.readString(Path.of("test.txt"));

    新的Java Switch

    var message = switch(status){}

    Stream - 主要功能是:惰性的接口;

    有了像Predicate这样的函数接口,我们就可以用lamada直接来使用这个函数接口了;

    我们都知道 Lambda 和 Stream 是 Java 8 的两大亮点功能;

    Stream 流操作是 Java 8 对集合操作功能的增强,专注于对集合的各种高效、便利、优雅的聚合操作

    Functional program or functional interface...

    流式操作:同时支持串行和并行的两种模式汇聚计算,流式操作的数据转换(也称映射)map

    Optional 预防空指针,Stearm 流式操作,LocalDateTime 时间操作;

    Java 中的 Lambda 的时候,你也会发现 Lambda 不仅没有函数名称,有时候甚至连入参和返回都可以省略,这也让代码变得更加紧凑;

    在 Java 8中已经有很多接口已经声明为函数接口,如 Runnable、Callable、Comparator 等;

    Lambda 的语法主要是下面几种:

    一个lambda由用逗号分隔的参数列表、–>符号、函数体三部分表示

    Person.create(1,"竹子爱熊猫",(Personperson)->{System.out.println("ABCDEFG……");})  //函数在这里作为一个参数;

    可以简化为:

    Person.create(1,"zero",person->System.out.println("竹子爱熊猫….."));

    一个Lambda表达式实现了接口里的有且仅有的唯一一个抽象方法。那么对于这种接口就叫做函数式接口:

    (params) -> expression

    (params) -> {statements;}

    Lambda 的语法特性:

    使用->分割 Lambda 参数和处理语句。

    类型可选,可以不指定参数类型,编译器可以自动判断。

    圆括号可选,如果只有一个参数,可以不需要圆括号,多个参数必须要圆括号。

    花括号可选,一个语句可以不用花括号,多个参数则花括号必须。

    返回值可选,如果只有一个表达式,可以自动返回,不需要 return 语句;花括号中需要 return 语法。

    Lambda 中引用的外部变量必须为 final 类型,内部声明的变量不可修改,内部声明的变量名称不能与外部变量名相同。

    定义的函数接口@FunctionalInterface可以在之后直接使用;

    而用方法引用的方式:实例/类::方法 - - 》User::getAge

    foreEach方法:

     skills.forEach((skill) -> System.out.print(skill+","));

    示例2因为用的 new 创建的集合,不属于不可变 AbstractImmutableList 类的子类,所以 copyOf 方法又创建了一个新的实例,所以为false

    3.JAVA原有的一些概念的清楚程度:

    Diamond Problem:B & C are all inherit from A,and D inherit from both B & C.

    很多问题都要想清楚了再回答,这样可以回答得很完整;

    4.为什么我们要用Lambda:

    我们其实不需要匿名内部类(或其依赖的接口),我们不需要这整个类或接口,但我们其实只需要知道方法体里的内容;这就是Lambda诞生的原因,Lambda其实还是那个接口,但形式简单、且是函数式编程;那Lambda是否是也继承了这个接口呢?

    函数式编程区别于指定式编程,它更在乎结果而不是过程;很多指令式编程语言(比如FortranBASICC)是汇编语言抽象化,汇编语言就是最底层化的语言;

    Scheme式函数式编程早期的范本,Lazy Evaluation或call by need

    5.

    相关文章

      网友评论

          本文标题:JAVA新版本有哪些新特性

          本文链接:https://www.haomeiwen.com/subject/zrqkjrtx.html