先上代碼 代碼執行結果是 載入類時執行 先執行我! 我雖然寫在初始化塊前但是實際先執行初始化塊里的內容再執行我 先執行我! 我雖然寫在初始化塊前但是實際先執行初始化塊里的內容再執行我 先執行我! 我雖然寫在初始化塊前但是實際先執行初始化塊里的內容再執行我 參考文章 http://www.cnblog ...
先上代碼
class A{ int a; static {System.out.println("載入類時執行");} public A() { System.out.println("我雖然寫在初始化塊前但是實際先執行初始化塊里的內容再執行我"); } {System.out.println("先執行我!");} } public class Html { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException{ Class O=Class.forName("A"); Class P=Class.forName("A"); O.newInstance(); A i=new A(); A o=new A(); } }
代碼執行結果是
載入類時執行
先執行我!
我雖然寫在初始化塊前但是實際先執行初始化塊里的內容再執行我
先執行我!
我雖然寫在初始化塊前但是實際先執行初始化塊里的內容再執行我
先執行我!
我雖然寫在初始化塊前但是實際先執行初始化塊里的內容再執行我
參考文章
http://www.cnblogs.com/xingzc/p/5760166.html
http://www.cnblogs.com/wangxin37/p/6397742.html
newlnstance()是一個方法
new是一個關鍵字
Class下的newlnstance()的使用有局限他只能調用無參的構造函數
new關鍵字生成對象(類的實例)沒有這個限制
Class..forName()返回的是一個類
Class.forName().newlnstance()返回的是Object(類的實例)
初始化塊
和構造方法一樣用於初始化對象(賦值);
一個初始化塊是在類中由一段花括弧括起來的
它的作用就是想是把他放在類中每個構造方法最開始的位置
Static初始化塊
和構造塊的區別是聲明中帶有STATIC外,其它和初始化塊一樣。當類載入時執行,只能引用static成員