java新版本技术

java8

1.lambda和函数式接口

(a,b)-> a+b

2.方法引用

通过方法引用,可以使用方法的名字来指向一个方法。使用一对冒号来引 "::" 用方法。

3.接口默认方法和静态方法

通过default关键字表示,也可以提供静态默认方法

4.重复注解

@Author(name = "a")
@Author(name = "b")
// 解析注解
AnnotatedElement.getAnnotationsByType(Class<T>)

5.类型注解

private String author = (@Author(name="a")String) name;

6.更好的类型判断

// java7
List<String> stringList = new ArrayList<>();
stringList.add("A");
stringList.addAll(Arrays.<String>asList());
// java8
List<String> stringList = new ArrayList<>();
stringList.add("A");
stringList.addAll(Arrays.asList());

7.optional

Optional 是一个可以保存 null 的容器对象。通过 isPresent() 方法检测值是否存在,通过 get() 方法返回对象。

8.stream

将元素集合看做一种流,在管道中传输,经过一系列处理节点,最终输出结果。

9.日期和时间api

LocalDate,LocalTime,LocalDateTime,ZonedDateTime

10.base64支持

提供了对 Base 64 编码的支持

11.并行数组ParallelSort

Arrays.parallelSort(new int[] {1, 2, 3, 4, 5});

12.JVM 的新特性

JVM内存永久区已经被metaspace替换(JEP 122)。JVM参数 -XX:PermSize 和 –XX:MaxPermSize被XX:MetaSpaceSize 和 -XX:MaxMetaspaceSize代替。

java9

1.Jigsaw 模块系统

之前打包和依赖都基于jar包进行,jre包含了rt.jar,将近63m。
只运行一个简单的helloworld也需要依赖这么大的jar包。
java9提出的模块化系统,对这点进行了改善。

2. JShell REPL

有了 JShell 以后,Java 可以像 Python,Node.js 一样在 Shell 中运行一些代码并直接得出结果了。

3.私有接口方法,接口中使用私有方法

4. 集合不可变实例工厂方法

// java 8 
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");

set = Collections.unmodifiableSet(set);
System.out.println(set);
// java 9
List<String> list = List.of("A", "B", "C");
Set<String> set = Set.of("A", "B", "C");
Map<String, String> map = Map.of("KA", "VA", "KB", "VB");

改进 try-with-resources

// java 8 
InputStream inputStream = new StringBufferInputStream("a");
try (InputStream in = inputStream) {
    in.read();
} catch (IOException e) {
    e.printStackTrace();
}
// java 9 
InputStream inputStream = new StringBufferInputStream("a");
try (inputStream) {
    inputStream.read();
} catch (IOException e) {
    e.printStackTrace();
}

java10

1.新增局部类型推断 var

var a = "aa";
System.out.println(a);

java11

1. Lambda 中使用 var

(var x, var y) -> x.process(y)

2. 字符串 API 增强

// 判断字符串是否为空白
" ".isBlank(); 
" Javastack ".stripTrailing();  // " Javastack"
" Javastack ".stripLeading();   // "Javastack "

3.java 直接编译并运行,省去先 javac 编译生成 class 再运行的步骤

java12

// Java 12 以后,switch 不仅可以作为语句,也可以作为表达式。
private String switchTest(int i) {
    return switch (i) {
        case 1 -> "1";
        default -> "0";
    };
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容