動態加載機制

我理解的動態加載機制就是在須要的時候繼續加載,舉個簡單的例子:spa

public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("--------"); People p = new People (); Pet pt = new Pet(); } }

用cmd命令Javac test1.Java先編譯生成.class文件code

      再經過Java -version test1能夠看出全部被加載的類文件對象

 

 標紅的部分是在代碼裏建立了People和Pet對象,因此被加載。blog

假設只聲明不實例化一個對象呢?圖片

public class test1 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("--------"); People p = new People (); //Pet pt = new Pet();  Pet pt; } }

並無加載Pet類。cmd

說明只有類被實例化才華加載。io

另外在這個例子中看一下static語句塊與static方法在加載時的區別編譯

public class Pet { static { System.out.println("原來如此"); } public static void show(){ System.out.println("show"); } }

依然看第一張圖片,控制檯只輸出了「原來如此」,說明只執行了靜態塊語句。剛開始我誤覺得只要是靜態的就該被執行,class

如今看來二者是有區別的,靜態塊語句是類被加載時執行,是主動的;而靜態方法是調用時才執行,是被動的。test

那麼靜態方法(調用能夠不建立對象,直接經過類名.靜態方法名調用)和非靜態方法(必須建立對象再調用)都是調用時纔會執行,

那麼效率同樣嗎?爲何在我所接觸的項目中,大多數方法都是用非靜態方法呢?本身還要去研究下。

相關文章
相關標籤/搜索