Sunday, December 30, 2012

Java深度历险

Java深度历险
javac运行结果与java -classpath C:\Java\jdk1.5.0_09\lib\tools.jar com.sun.tools.javac.Main相同
正因为JDK里面的工具几乎是用Java所写的,所以JDK本身就是Java应用程序,因此要使用JDK附的工具
来开发Java程序,也必须要自行附一套JRE才行。这就是jdk安装目录\jre底下要有一套JRE的原因。而位于
Program File底下的那套JRE就是拿来执行我们自己所撰写的Java应用程式。
java.exe 依照底下邏輯來尋找JRE:
1. 自己的目錄下有沒有JRE 目錄。(這個部分這樣說並不是非常精確,原因
請詳見JDK 原始碼,這此不特別說明)
2. 父目錄底下JRE 子目錄。
3. 查詢Windows Registry(HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment\)。
不管您使用的是new 來產生某類別的實體、或是使用
只有一個參數的forName()方法,內部都隱含了”載入類別+呼叫靜態初始化區
塊”的動作。而使用具有三個參數的forName()方法時,如果第二個參數給定的
是false,那麼就只會命令類別載入器載入該類別,但不會叫用其靜態初始化區
塊,只有等到整個程式第一次實體化某個類別時,靜態初始化區塊才會被叫用。
,直接使用ClassLoader 類別的loadClass()方法來載入
類別,只會把類別載入記憶體,並不會叫用該類別的靜態初始化區塊,而必須等
到第一次實體化該類別時,該類別的靜態初始化區塊才會被叫用。這種情形與使
用Class 類別的forName()方法時,第二個參數傳入false 幾乎是相同的結果。

No comments:

Post a Comment