JavaJDK8新特性相关知识整理

一、新增接口默认方法和接口静态方法
     接口默认方法用default关键字修饰,与抽象方法不一样之处在于抽象方法必需要求实现,而默认方法没有这个要求,默认方法自己已经有具体的实现,全部的接口实现类将会默认继承它,也能够覆盖这个默认实现。java

private interface Defaulable {  
    // Interfaces now allow default methods, the implementer may or
    // may not implement (override) them.
    default String notRequired() {
        return "Default implementation";
    }
}
private static class DefaultableImpl implements Defaulable {  
}

private static class OverridableImpl implements Defaulable {  
    @Override
    public String notRequired() {
        return "Overridden implementation";
    }
}

     接口静态方法用static关键字修饰,有具体的方法实现。数组

public interface StaticInterface {
    static void method() {
        System.out.println("这是Java8接口中的静态方法!");
    }
}

public class Main {
    public static void main(String[] args) {
        StaticInterface.method(); // 输出 这是Java8接口中的静态方法!
    }
}

二、Lambda表达式
     Lambda表达式容许把函数做为方法的参数,由逗号分隔的参数列表、->符号和函数体三部分组成安全

     对比使用非Lambda与使用Lambda实现ide

public class Test2 {
    
    public static void main(String[] args) {
        
        List<String> names = Arrays.asList("张三","李四","王五","赵六");
        
        //非Lambda表达式实现排序
        Collections.sort(names,new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                return b.compareTo(a);
            }
        });
        
        //Lambda表达式实现排序
        Collections.sort(names,(a,b)->b.compareTo(a));
        
        System.out.println(names.toString());
    }

}

三、函数式接口
     函数式接口指只有一个函数的接口,使用@FunctionallInterface注解来代表该接口是一个函数式接口。java.lang.Runable和java.util.concurrent.Callable就是函数式接口的例子函数

     使用非Lambda建立线程:ui

         //经过匿名内部类来建立线程
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                int a = 0;
                for(long i = 0; i < count; i++) {
                    a += 1;
                }
            }            
        });

  使用Lambda表达式建立线程spa

        //经过Lambda表达式建立线程
        Thread thread2 = new Thread(()->{
            int a = 0;
            for(long i = 0; i < count; i++) {
                a += 1;
            }}
        );

四、HashMap的底层实现由原来的数组+链表实现改成数组+链表+红黑树实现
五、JVM内存管理方面,由元空间代替了永久代
六、新增java.time包
     包含了全部关于日期、时间、时区、持续时间和时钟操做的类,这些类都是不可变的,线程安全
七、引入重复注解@Repeatable线程

相关文章
相关标签/搜索