java10学习笔记

发布于:2025-08-11 ⋅ 阅读:(11) ⋅ 点赞:(0)

        Java 10 于 2018 年 3 月发布,是 Java 平台按照新的六个月发布周期发布的第一个版本。虽然相比 Java 8 和 Java 9 的大型更新,Java 10 的变化较小,但仍然引入了一些重要的特性,特别是本地变量类型推断(var) 。

局部变量类型推断

        Java 10 最引人注目的特性是引入了 var 关键字,允许编译器根据变量初始化表达式自动推断局部变量的类型。这个特性使 Java 代码更加简洁,减少了冗余的类型声明。

        值得注意的是,虽然 var 看起来像动态类型,但 Java 依然是强类型语言。var 只是在编译时由编译器负责类型推断,一旦推断完成,变量的类型就固定了,在运行时不会改变。

        var app="q123";
        //1.没有初始化器的变量声明
//        var num ;
//        var s = null;
//        //2.lambda表示式中,左边的函数式接口不能声明为var
        Supplier<Double> sup = () -> Math.random();
//        var sup = () -> Math.random();
//        //3.方法引用中,左边的函数式接口不能声明为var
        Consumer<String> con = System.out::println;
//        var con = System.out::println;
//        //4.数组的静态初始化中,注意如下的情况也不可以
        int[] arr = {1, 2, 3, 4};
//        var arr = {1,2,3,4};
        //        捕获表达式(catch)
//        try{
//
//        }catch(var e){
//            e.printStackTrace();
//        }
        //方法的返回类型
//    public var method1(){
//            return 0;
//    }
        //方法的参数类型
//    public void method2(var num){
//
//    }

copyof()

自 Java 9 开始, Jdk 里面为集合(List / Set / Map) 都添加了 of (jdk9新增)和copyOf (jdk10新增)方法, 它们两个都用来创建不可变的集合, 来看下它们的使用和区别。

static <E> List<E> copyOf(Collection<? extends E> coll) {
    if (coll instanceof ImmutableCollections.AbstractImmutableList) {
        return (List<E>)coll;
    } else {
        return (List<E>)List.of(coll.toArray());
    }
}
static <E> Set<E> copyOf(Collection<? extends E> coll) {
    if (coll instanceof ImmutableCollections.AbstractImmutableSet) {
        return (Set<E>)coll;
    } else {
        return (Set<E>)Set.of(new HashSet<>(coll).toArray());
    }
}
static <K, V> Map<K, V> copyOf(Map<? extends K, ? extends V> map) {
    if (map instanceof ImmutableCollections.AbstractImmutableMap) {
        return (Map<K,V>)map;
    } else {
        return (Map<K,V>)Map.ofEntries(map.entrySet().toArray(new Entry[0]));
    }

返回一个只读集合,如果被复制的是只读集合,返回它本身,如果不是创建一个只读集合并返回

        var map = Map.of("Java", "Python", "C", "C");
        var copyMap = Map.copyOf(map);
        System.out.println(map == copyMap); // true


        var list = new ArrayList<String>();
        list.add("牛逼");
        var copyList = List.copyOf(list);
        System.out.println(copyList == list); // false

垃圾回收器

G1并行Full GC

        G1垃圾收集器在jdk9中是默认的。G1垃圾收集器避免了任何完全的垃圾收集,但是当用于收集的并发线程不能足够快地恢复内存时,用户的体验就会受到影响。

此更改通过使完全GC并行来改善G1最坏情况下的延迟。G1收集器的mark-sweep compact算法作为此更改的一部分被并行化,当用于收集的并发线程不能足够快地恢复内存时,它将被触发。

垃圾收集器接口

        这个JEP是未来的变化。它通过引入一个通用的垃圾收集器接口来改进不同垃圾收集器的代码隔离。

        此更改为内部GC代码提供了更好的模块化。它将有助于将来添加新的GC而不改变现有的代码基,也有助于删除或管理以前的GC。


网站公告

今日签到

点亮在社区的每一天
去签到