zoukankan      html  css  js  c++  java
  • jdk各版本新特性

    java8https://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html

    1)、lamda

    2)、函数式接口

    @FunctionalInterface
    interface Operation {
        int operation(int a, int b);
    }
    class Test {
        private int operate(int a, int b, Operation operation) {
            return operation.operation(a, b);
        }
    }
    
    Test test = new Test();
    
    *****java8前:
    test.operate(1, 2, new Operation() {
        @Override
        public int operation(int a, int b) {
            return a + b;
        }
    });
    *****java8:
    test.operate(1, 2, (a, b) -> a + b);

    3)、接口默认方法和静态方法

    Java 8 新增了接口的默认实现,通过 default 关键字表示。同时也可以提供静态默认方法。

    public interface TestInterface {
        String test();
    
        // 接口默认方法
        default String defaultTest() {
            return "default";
        }
    
        static String staticTest() {
            return "static";
        }
    }

    4)、Optional

    Java 8 中新增了 Optional 类用来解决空指针异常。Optional 是一个可以保存 null 的容器对象。通过 isPresent() 方法检测值是否存在,通过 get() 方法返回对象。

    // 创建一个 String 类型的容器
    Optional<String> str = Optional.of("str");
    // 值是否存在
    boolean pre = str.isPresent();
    // 值如果存在就调用 println 方法,这里传入的是 println 的方法引用
    str.ifPresent(System.out::println);
    // 获取值
    String res = str.get();
    // 传入空值
    str = Optional.ofNullable(null);
    // 如果值存在,返回值,否则返回传入的参数
    res = str.orElse("aa");
    str = Optional.of("str");
    // 如果有值,对其调用映射函数得到返回值,对返回值进行 Optional 包装并返回
    res = str.map(s -> "aa" + s).get();
    // 返回一个带有映射函数的 Optional 对象
    res = str.flatMap(s -> Optional.of(s + "bb")).flatMap(s -> Optional.of(s + "cc")).get();

    5)、Base64支持

    String base64 = Base64.getEncoder().encodeToString("aaa".getBytes());
    System.out.println(base64);
    byte[] bytes = Base64.getDecoder().decode(base64);
    System.out.println(new String(bytes));

    6)、对并发的增强 在java.util.concurrent.atomic包中还增加了下面这些类

    DoubleAccumulator DoubleAdder LongAccumulator LongAdder

    java9https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-C23AFD78-C777-460B-8ACE-58BE5EA681F6

    1)、Jigsaw 模块系统
    2)、JShell REPL。直接在控制台上录入java代码并执行,无需编译。
    3)、接口中可使用私有方法

    public interface TestInterface {
        String test();
    
        // 接口默认方法
        default String defaultTest() {
            pmethod();
            return "default";
        }
    
        private String pmethod() {
            System.out.println("private method in interface");
            return "private";
        }
    }

    4)、创建不可变集合

    之前:
    public interface TestInterface {
        String test();
    
        // 接口默认方法
        default String defaultTest() {
            pmethod();
            return "default";
        }
    
        private String pmethod() {
            System.out.println("private method in interface");
            return "private";
        }
    }
    
    java9:
    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");

    5)、多版本兼容 jar 包

    Java 9 中支持在同一个 JAR 中维护不同版本的 Java 类和资源。

    6)、新增HTTP2 Client

    public class HttpTest {
        public static void main(String[] args) throws Exception {
            String uri = "http://www.oracle.com/";
     
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(uri))
                    .build();
     
            HttpResponse<String> response =
                    client.send(request, HttpResponse.BodyHandlers.ofString());
     
            System.out.println(response.body());
        }
    }

    java10https://www.oracle.com/technetwork/java/javase/10-relnote-issues-4108729.html#NewFeature

    1)、var局部变量类型推断,如:

    之前:ArrayList<String> myList = new ArrayList<String>()
    现在:var list = new ArrayList<String>()

    2)、JDK 10 引入一种在线程上执行回调的新方法,很方便的停止单个线程而不是停止全部线程或者一个都不停。

    java11https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#NewFeature

    1)、支持TLS1.3

    2)、java 命令直接编译并运行 java 文件,省去先 javac 编译生成 class 再运行的步骤
    3)、字符串API增强

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

    4)、Lambda 表达式中使用 var。如:(var x, var y) -> x.process(y)

    java12https://www.oracle.com/technetwork/java/javase/12all-relnotes-5211423.html#NewFeature

    1)、unicode支持:中国象棋符号、评级半星、表情符号
    2)、NumberFormat。如:

    NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);
    String result = fmt.format(1000);

    上面的示例生成“ 1K”。

    3)、G1和Parallel GC中的这一实验性功能允许他们在替代存储设备(例如NV-DIMM内存)上分配旧版Java堆。
    4)、switch,如

    private String switchTest(int i) {
        return switch (i) {
            case 1 -> "1";
            default -> "0";
        };
    }

    java13https://www.oracle.com/technetwork/java/13-relnote-issues-5460548.html#NewFeature

  • 相关阅读:
    并发系列64章(异步编程三)第四章
    并发系列64章(异步编程二)第三章
    并发系列64章(异步编程)第二章
    sql 语句系列(记录时间差)[八百章之第十八章]
    sql 语句系列(两个日期之间)[八百章之第十七章]
    sql 语句系列(计算的进阶)[八百章之第十六章]
    sql 语句系列(众数中位数与百分比)[八百章之第十五章]
    [转]迅速提升三倍你的工作效率
    漫谈碎片化学习(Fragmentation learning)
    [转]禅修程序员十诫
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/11798644.html
Copyright © 2011-2022 走看看