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()
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是否是也继承了这个接口呢?
函数式编程区别于指定式编程,它更在乎结果而不是过程;很多指令式编程语言(比如Fortran、BASIC和C)是汇编语言的抽象化,汇编语言就是最底层化的语言;
Scheme式函数式编程早期的范本,Lazy Evaluation或call by need
5.
网友评论