JDK9-17开发常用的新特性

本文介绍了JDK9至17的显著新特性,包括JDK9的`_`关键字、JShell、多分辨率图像API和ZGC;JDK10的局部变量类型推断、Optional增强、并行全垃圾回收器G1;JDK11的String新方法、ZGC和FlightRecorder;JDK12的switch表达式新特性、NumberFormat改进;JDK13的文本块、Socket API重构和ZGC增强;JDK14的instanceof模式匹配、record类型和堆外内存访问API;JDK15的密封类、隐藏类、禁用偏向锁定;JDK16的ZGC并发处理和弹性元空间;以及JDK17的重要特性。
摘要由CSDN通过智能技术生成

以下样例代码均可在样例代码中查看

jdk9新特性

新功能和库的更新

"_"为关键字,不可作为变量名

As of Java 9, '_' is a keyword, and may not be used as an identifier

String _ = "123"; //编译错误

### 接口新增私有方法
新增私有方法,方便在接口多个实现中使用

public interface PrivateInterfaceMethod {
/**
* jdk1.9新增
/
private static void testPri() {
System.out.println(“接口私有方法”);
}
/
*
* jdk1.8新增静态方法和默认方法
*/
public static void test1() {
System.out.println(“静态方法”);
testPri();
}
default void test2() { // 可以被实现类覆写
System.out.println(“默认方法”);
testPri();
}
}

### 钻石操作符(泛型)的升级
	/**
     * 创建范型类的时候,可以重写其中的方法
     */
    Set<String> set = new HashSet<String>() {
        @Override
        public boolean add(String s) {
            return super.add(s + "&");
        }
    };
    set.add("1");
    set.add("2");
    set.add("3");
    set.forEach(System.out::println);

### 支持在try外进行实例化

支持在try外进行实例化,try内对象为final不可再修改; 结束后自动释放

	InputStreamReader reader = new InputStreamReader(System.in);
    InputStreamReader reader1 = new InputStreamReader(System.in);
    /**
     * 支持在try外进行实例化,try内对象为final不可再修改; 结束后自动释放
      */
    try (reader;reader1) { //支持多个,用;分隔即可
          // do something
        reader.read();
        reader1.read();
    } catch (IOException e) {
        System.err.println("异常:" + e);
    }
### String存储结构发生变化

char[]修改为byte[],String,StringBuffer,StringBuilder
jdk1.8及以前
![jdk8String存储](https://img-blog.csdnimg.cn/ff436b68941549729760a1a81fe37505.png#pic_center)
9以后
![jdk9+存储结构](https://img-blog.csdnimg.cn/62ddc0d524184f99aef90d14c54c9964.png#pic_center)
### 集合调整-快速创建只读集合
	List<Integer> integers = Collections.unmodifiableList(Arrays.asList(1, 2, 3));
    // java.lang.UnsupportedOperationException
    // integers.add(4);

    //9以后可使用这种方式
    List<Integer> integers1 = List.of(1, 2, 3);
    // java.lang.UnsupportedOperationException
    //integers1.add(4);


    Map<Object, Object> map = Collections.unmodifiableMap(new HashMap<>() {
        {
            put("a", "a");
            put("b", "b");
            put("c", "c");
        }
    });

    //9以后可使用这种方式
    Map<String, Object> map1 = Map.ofEntries(Map.entry("a", 1), Map.entry("b", 2), Map.entry("c", 3)); // 传入一个个键值对entry对象
    Map<String, Object> map2 = Map.of("a", 1, "b", 2, "c", 3); // 入参顺序:k1, v1, k2, v2...

### 增强流API
- takeWhile()
- dropWhile()
- of()
- ofNullable()
- iterator增加结束条件
    List<Integer> a = new ArrayList<>();
    a.add(1);
    a.add(3);
    a.add(5);
    a.add(7);
    a.add(9);
    // 直到不满足条件,停止读取
    a.stream().takeWhile(b -> b < 5).forEach(System.out::println);
    System.out.println("----------");
    //直到满足条件,才开始读取
    a.stream().dropWhile(b -> b < 5).forEach(System.out::println);
    System.out.println("----------");

    Stream.ofNullable(null).forEach(System.out::println);
    System.out.println("----------");

    Stream.of("123", "234", null, null, "345").forEach(System.out::println);

//------------------
Stream.iterate(0, x -> x < 3, x -> x + 1).forEach(System.out::println);
System.out.println(“--------------”);
//等价于
for (int x=0;x<3;x++) {
System.out.println(x);
}


### I/O流新特性

- readAllBytes:读取 InputStream 中的所有剩余字节。 
- readNBytes: 从 InputStream 中读取指定数量的字节到数组中。 
- transferTo:读取 InputStream 中的全部字节并写入到指定的 OutputStream 中。

### HttpClient重写
HttpClient增加异步调用 sendAsync()

## JVM优化

## 其他功能


JShell

使用jshell命令启动jshell,输入表达式即可实现基本功能运算

jshell> int add(int x, int y) {
    ...> return x + y;
    ...> }

jshell> add(1, 2)
$2 ==> 3

改进应用安全性能

新增4个SHA-3哈希算法,SHA3-224,SHA3-256,SHA3-384和SHA3-512。另外也增加了通过 java.security.SecureRandom 生成使用 DRBG 算法的强随机数

多分辨率图像API

统一的jvm日志系统

JDK10新特性

新功能和库的更新

局部变量类型推断

现在有var声明。它允许开发者在不指定其类型的情况下声明局部变量。变量的类型将从创建的实际对象的类型中推断出来。

    public static void main(String[] args) {
        var a = "123";
        var b = 123;
        var c = new VarTest();
       // Integer aInt = (Integer)a;
        var bInt = (Integer)b;
        System.out.println(a.getClass()); //String
        System.out.println(bInt.getClass());
        System.out.println(c.getClass());
        /**
         * class java.lang.String
         * class java.lang.Integer
         * class com.mochi.jdk10.VarTest
         */
    }

Optional增强

Optional.orElseThrow(),orElseThrow类中添加了一个新方法。
它是现有方法的同义词,现在是现有方法的首选替代get方法。

 		System.out.println(Optional.ofNullable(null).orElse("123"));
        //也可以使用函数式接口实现
        System.out.println(Optional.ofNullable(null).orElseGet(() -> "123"));
        //或者抛出异常
        S
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值