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線程

相關文章
相關標籤/搜索