前面我們學習了 Java 字節(jié)碼冤议,寫好的代碼經(jīng)過編譯變成了字節(jié)碼榛了,并且可以打包成 Jar 文件。
然后就可以讓 JVM 去加載需要的字節(jié)碼,變成持久代/元數(shù)據(jù)區(qū)上的 Class 對象喷好,接著才會執(zhí)行我們的程序邏輯。
我們可以用 Java 命令指定主啟動類读跷,或者是 Jar 包梗搅,通過約定好的機制,JVM 就會自動去加載對應的字節(jié)碼(可能是 class 文件,也可能是 Jar 包)无切。
我們知道 Jar 包打開后實際上就等價于一個文件夾荡短,里面有很多 class 文件和資源文件,但是為了方便就打包成 zip 格式哆键。 當然解壓了之后照樣可以直接用 java 命令來執(zhí)行掘托。
$ java Hello
或者把 Hello.class 和依賴的其他文件一起打包成 jar 文件:
示例 1: 將 class 文件和 java 源文件歸檔到一個名為 hello.jar 的檔案中:
jar cvf hello.jar Hello.class Hello.java
示例 2: 歸檔的同時,通過e
選項指定 jar 的啟動類Hello
:jar cvfe hello.jar Hello Hello.class Hello.java
然后通過 -jar
選項來執(zhí)行jar包:
$ java -jar hello.jar
當然我們回過頭來還可以把 jar 解壓了籍嘹,再用上面的 java 命令來運行烫映。
運行 java 程序的第一步就是加載 class 文件/或輸入流里面包含的字節(jié)碼。
- 類的生命周期和加載過程
- 類加載時機
- 類加載機制
- 自定義類加載器示例
- 一些實用技巧
- 如何排查找不到 Jar 包的問題噩峦?
- 如何排查類的方法不一致的問題锭沟?
- 怎么看到加載了哪些類,以及加載順序识补?
- 怎么調整或修改 ext 和本地加載路徑族淮?
- 怎么運行期加載額外的 jar 包或者 class 呢?