虛擬機器載入類的途徑:
1、dog dog = new dog();
這個動作會導致常量池的解析,dog類被隱式裝載。
如果當前classloader無法找到dog,則丟擲noclassdeffounderror。
2、class clazz = class.forname(「dog」);
object dog =clazz.newinstance();
通過反射載入型別,並建立物件例項
如果無法找到dog,則丟擲classnotfoundexception。
3、class clazz = classloader.loadclass(「dog」);
object dog =clazz.newinstance();
通過反射載入型別,並建立物件例項
如果無法找到dog,則丟擲classnotfoundexception。
那麼,1和2和3究竟有什麼區別呢?分別用於什麼情況呢?
1和2使用的類載入器是相同的,都是當前類載入器。(即:this.getclass.getclassloader)。
3由使用者指定類載入器。
如果需要在當前類路徑以外尋找類,則只能採用第3種方式。第3種方式載入的類與當前類分屬不同的命名空間。
當前類載入器命名空間對其不可見。當然,如果被載入類的超類對於當前類命名空間可見的話,則可以進行強制轉型。
第1和第2種情況區別不大。如果,dog類在編譯時無法得到,則使用第2種方式。
另外,第1種和第2種都會導致類被初始化,即:執行類的靜態初始化語句,而第3種情況不會。
另外注意,第1種丟擲error,第2、3種丟擲exception,它們分屬於不同的異常/錯誤分支。
-----------------------------
物件例項化方式:
1、new dog();
2、clazz.newinstance();或者clazz.getconstructor(...).newinstance(...);
3、object.clone();//通過本地方法進行複製
4、反序列化
jquery幾種載入方式
1.function jquery 實際上是執行 para 匿名方法,只不過是傳遞了jquery物件,用來定義一些需要預先定義好的函式。這種寫法的最大好處是形成閉包。在 function jquery 在內部定義的函式和變數只能在此範圍內有效。形成是否函式函式 私有變數的概念。2.function ...
c 幾種型別轉換方式
1 初始化和賦值進行的轉換 1 float one 1 整型轉浮點型23 int guess 2.333 double轉int45 int debt 7.2e12 flot轉int 但是無法儲存過大資料 2 以 方式初始化時進行轉換 1 條件 不允許轉換最大範圍還大大的資料,比如float就不能轉換...
Unity資源載入的幾種方式
unity資源載入的幾種方式 instantiate 最簡單的一種方式,以例項化的方式動態生成乙個物體。assetsbundle 即將資源打成 asset bundle 放在伺服器或本地磁碟,然後使用www模組get 下來,然後從這個bundle中load某個object,unity官方推薦也是絕大...