原文連結:http://leiming32.blog.51cto.com/1021363/494913
1、當在內部類中使用this指的就是內部類的對象, 為了訪問外層類對象,就可以使用外層類名.this來訪問。
2、在java中,每個class都有一個相應的Class對象,當編寫好一個類,編譯完成後,在產生的.class檔案中,就產生一 個Class對象,用來表示這個類的類型資訊。獲得Class執行個體的三種方式:
1). 利用對象調用getClass()方法擷取該對象的Class執行個體
2). 使用Class的靜態方法forName(),用類的名字擷取一個Class執行個體
3). 運用.calss的方式擷取Class執行個體,對基礎資料型別 (Elementary Data Type)的封裝類,還可以採用.TYPE來擷取對應的基礎資料型別 (Elementary Data Type)的Class執行個體。
以下是TestClass.java代碼:
public class TestClass { public static void main(String[] args) { // 在運行期間,如果我們要產生某個類的對象,java虛擬機器會檢測該類型的Class對象是否已被載入。 // 如果沒有載入,java虛擬機器會根據類的名稱找到.class檔案並載入它。 // 當new Point()的時候載入這個類,用forName構造執行個體的時候也載入該類。 只載入一次 System.out.println("before new Point()"); new Point(); System.out.println("after new Point()"); try { Class.forName("Line"); } catch (Exception e) { e.printStackTrace(); } // 利用對象調用getClass()方法擷取該對象的Class執行個體 Point pt = new Point(); Class c1 = pt.getClass(); System.out.println(c1.getName()); // 結果:Point // 使用Class的靜態方法forName(),用類的名字擷取一個Class執行個體 try { Class c2 = Class.forName("Point"); System.out.println(c2.getName()); // 結果:Point Point pp = (Point) c2.newInstance(); //一旦某個類型的Class對象已經被載入到記憶體,就可以用它來產生該類型的所有對象。 //newInstance()調用類中預設的構造方法。 pp.output(); } catch (Exception e) { e.printStackTrace(); } // 運用.class的方式擷取Class執行個體(類) Class c3 = Point.class; System.out.println(c3.getName()); // 結果:Point // 運用.calss的方式擷取Class執行個體(基本類型) Class c4 = int.class; System.out.println(c4.getName()); // 結果:int // 運用.class的方式擷取Class執行個體(基礎資料型別 (Elementary Data Type)的封裝類) Class c5 = Integer.TYPE; System.out.println(c5.getName()); // 結果:int Class c6 = Integer.class; System.out.println(c6.getName()); // 結果:java.lang.Integer } } class Point { static { System.out.println("loading point"); } void output() { System.out.println("x=" + x + ",y=" + y); } int x, y; } class Line { static { System.out.println("loading Line"); } }