java隨記2
1、Arrays
java8裏新添加了parallelSort等parallel開頭的方法,表示利用cpu並行的能力
2.面向對象
如果繼承樹裏的某個類要被初始化時,系統將會同時初始化該類的所有父類
子類不會獲得父類的構造器,但子類構造器可以使用super調用父類構造器。但super調用也必須出現在構造器第一行,所以super和this不會同時出現。
另外,不管是否使用super調用來執行父類構造器,子類構造器總會調用父類構造器一次。因為系統會在執行子類構造器前,隱式調用父類無參數的構造器,父類會先調用更父類的構造器,所以最先執行的總是java.lang.Object類的構造器。
多態
java引用變量有兩個類型:一個是編譯時類型,一個是運行時類型。編譯時類型由聲明該變量時使用的類型決定,運行時類型由實際賦給該變量的對象決定。如果編譯時類型和運行時類型不一致,就可能出現所謂的多態。
當把一個子類的實例對象直接賦給父類引用變量時,這個引用變量的編譯類型是父類,運行類型是子類,所以當運行時調用該引用變量的方法時,總是表現出子類的方法,於是:相同類型的變量,調用同一個方法時,呈現多種不同的行為特征,這就是多態。
與方法不同的是,變量則不具有多態性,調用時依然是父類的變量值。
引用變量在編譯階段只能調用其編譯類型所具有的方法,但運行時則執行它運行時類型所具有法方法,因此,多態時,可通過反射來調用父類所不具有的子類法方法。
遞歸
public static int fn(Integer n){ if(n.equals(0)){ return 1; } if(n.equals(1)){ return 4; } return 2*fn(n-1)+fn(n-2); }
1、如果一個包裝類和一個基本類型比較大小,或者是兩個基本類型進行比較大小,直接用==就好;
如果是兩個包裝類進行比較大小,那麽使用equals(),返回值是true,false,或者使用Xxx.compare(),返回值是1,0,-1。(這裏的equals()方法,已經被包裝類重寫過了,不是Object的equals())
2、==和equals方法的區別
當使用==來判斷兩個變量是否想等時,比較的是棧內存中的值,如果兩個變量是基本類型變量,且都是數值類型,那麽棧內存中個存放的是基本類型變量的值,所以只要兩個基本類型變量的值想等,就會返回true。但對於兩個引用類型變量,由於棧內存中存放的是變量的引用,所以只有當這兩個引用類型變量指向同一個對象是,==才會返回true。==不可用於比較類型上沒有父子關系的兩個對象。
equals()方法是Object類的一個實例方法,但這個方法和==沒區別。不過String類和基本類型的包裝類重寫了這個equals()方法,不再比較引用對象的引用地址,而是比較所引用的值。
系統自動為接口裏的成員變量添加public static final修飾符.
所以接口裏定義int MAX = 50;和定義 public static final int MAX = 50;的意義是一樣的.
3.Lambda表達式示例
Runnable r = () -> { for (int i = 0; i < 100; i++) { System.out.println(i); } }; new Thread(r,"線程1").start();new Thread(r,"線程2").start();
Lambda表達式只能實現一個函數式接口(只有一個抽象方法的接口)
跟匿名內部類有很大的相似處
4.強制垃圾回收
System.gc()
Runtime.getRuntime().gc();
重寫finalize()方法,可以看出是否執行了垃圾清理
java隨記2