Java第六週課堂示例總結

1、若是一個類中既有初始化塊,又有構造方法,同時還設定了字段的初始值,誰說了算?ide

 1 public class InitializeBlockDemo {  2 
 3     /**
 4  * @param args  5      */
 6     public static void main(String[] args) {  7         
 8         InitializeBlockClass obj=new InitializeBlockClass();  9  System.out.println(obj.field); 10         
11         obj=new InitializeBlockClass(300); 12  System.out.println(obj.field); 13  } 14 
15 } 16 
17 class InitializeBlockClass{ 18     //下面這句在初始化塊以前與以後,會影響到field字段的初始值 19     //public int field=100;
20     
21  { 22         field=200; 23  } 24     public int field=100; 25     public InitializeBlockClass(int value){ 26         this.field=value; 27  } 28     public InitializeBlockClass(){ 29         
30  } 31 }

運行結果:函數

 

若field定義在代碼塊以前:                                       this

 若在代碼塊後面:spa

能夠得出結果:構造函數的優先級最高,最後必定執行構造函數。設定了字段的初始值與代碼塊的優先級相同,在沒有構造函數的狀況下,按照順序依次執行,獲得後面的結果。3d

 

2、靜態方法中只容許訪問靜態數據,那麼,如何在靜態方法中訪問類的實例成員?code

package TestDemo; public class E { int x=3; public static void f(){ E a=new E(); System.out.println(a.x); } public static void main(String[] args) { E x=new E(); x.f(); } }

能夠經過在靜態方法中將一個對象的引用傳入到靜態方法中,即可以調用該對象的非靜態方法。對象

 

3、使用類的靜態字段和構造函數,能夠跟蹤某個類所建立對象的個數。請寫一個類,在任什麼時候候均可以向它查詢「你已經建立了多少個對象?」。blog

 1 package TestDemo;  2 
 3 public class E {  4     static int x=0;  5  E(){  6         x++;  7  }  8 
 9     void f() { 10         System.out.println("你共建立了"+x+"個"); 11  } 12     public static void main(String[] args) { 13         E a=new E(); 14  a.f(); 15         E b=new E(); 16         E c=new E(); 17         E d=new E(); 18  d.f(); 19  } 20 }

運行結果:it

 

4、 對象判等:編譯

 

運行結果爲false

當「==」施加於原始數據類型變量時,是比較變量所保存的數據是否相等 當「==」施加於引用類型變量時,是比較這兩個變量是否引用同一對象。

兩個對象的「內容」,實際上是指它們在某一時刻的全部字段的值,「內容相等」,實際上是就「對應字段值」一致。 在Java中要比對兩個對象的字段值,能夠 「重寫(override)」基類的equals()方法。

5、裝箱與拆箱問題:

public static void main(String[] args) { int value=100; Integer obj=value;  //裝箱

        int result=obj*2;     //拆箱
 }

簡單一點說,裝箱就是自動將基本數據類型轉換爲包裝器類型;拆箱就是自動將包裝器類型轉換爲基本數據類型。

反編譯結果:

能夠看到分別調用了 Integer.valueOf();和 Integer.intValue();方法

看以下代碼:

 

兩對整數明明徹底同樣,爲什麼一個輸出true,一個輸出false?

解答:

 

 反編譯

方法 Integer.valueOf();源代碼:

public static Integer valueOf(int i) { return  i >= 128 || i < -128 ? new Integer(i) : SMALL_VALUES[i + 128]; }

能夠看到,當i不符合範圍時爲建立一個Integer的對象,故不相等。

相關文章
相關標籤/搜索