java的載入與編譯
A. jvm如何在運行時動態把java文本編譯成class,然後載入到jvm
為了在Java程序運行時動態編譯Java源代碼並生成Class文件,避免將編譯產物存到文件中,可以採用特殊的方法,例如自定義實現JavaFileManager和JavaFileObject。這類操作較為復雜,但提供了一種靈活的解決方案。
實現策略可以分為兩步:首先在運行時編譯Java源代碼,獲取編譯後的位元組碼;其次,使用自定義類載入器在運行時定義這些類。通過這種方式,無需文件操作,直接在內存中完成編譯與載入過程。
在使用編譯器API進行動態編譯時,可以遵循上述步驟。涉及的關鍵類JavaFileManager和JavaFileObject需要自定義實現,以滿足特定的文件管理需求。
然而,在嘗試使用Java11環境下運行上述代碼時,可能會遇到編譯失敗的問題,而Java8環境下則能正常運行。具體原因尚未查明,可能涉及Java版本的兼容性或API實現細節的變動。
B. java 程序怎麼編譯與運行啊
使用記事本編寫Java程序時,首先需要確保程序中包含一個主類,並且這個主類中定義了主方法。編寫完成後,可以將文件保存為與主類同名的文件,後綴名為.java。接下來,在命令提示符(DOS)環境下,切換到保存Java文件的目錄,使用javac命令進行編譯,例如:javac Main.java。如果編譯過程沒有出現錯誤提示,表示編譯成功。然後,使用java命令運行程序,例如:java Main。如果程序運行無誤,那麼程序的輸出結果將顯示在命令提示符窗口下方。
值得注意的是,運行Java程序時,應確保已經安裝了JDK,並配置好了環境變數。否則,可能會遇到找不到javac或java命令的情況。另外,編寫Java程序時,應盡量遵循良好的編程習慣,如合理命名變數、方法和類,保持代碼結構清晰等。這不僅有助於提高代碼的可讀性,也有利於後期維護。
此外,編譯和運行Java程序時,可能會遇到一些常見的錯誤,如語法錯誤、類型錯誤等。遇到這些問題時,需要仔細檢查代碼,找出錯誤的原因並進行修正。可以通過查閱官方文檔或在線資源來獲取相關幫助。
值得注意的是,Java程序的編譯和運行過程相對簡單,但要編寫出高效且功能強大的程序,則需要掌握更多Java語言的核心概念和高級特性。建議學習者在掌握基礎語法後,進一步學習面向對象編程、異常處理、多線程等高級主題,以提高編程技能。
總之,通過使用記事本編寫Java程序,並遵循正確的編譯和運行步驟,可以輕松地創建和運行簡單的Java程序。在學習過程中,不斷實踐和探索,將有助於提升編程水平。
C. java編譯通過,為什麼運行卻提示找不到或無法載入主類
初學編程時,可能會遇到這樣一個問題:編寫好的Java代碼能夠通過編譯,但在運行時卻提示「找不到或無法載入主類」。這種情況讓人困惑不已。經過一番排查,發現這主要是由於環境配置和路徑設置不當引起的。
首先,需要確保在編譯Java代碼時正確設置了類路徑(classpath)。在設置classpath時,應在最前面添加本目錄路徑,用"."表示。若後面還有其他路徑,如dt和tools路徑,則應在"."後面加";"進行分隔。
其次,在cmd命令行中運行javac和java命令時,必須在Java源文件所在的目錄下進行。這樣編譯生成的class文件也會存放在該目錄下,當執行java命令時,程序會優先在本目錄下尋找相應的class文件,從而避免找不到類的問題。
值得注意的是,cmd的運行路徑通常默認為C:\個人文件夾,而Java源文件往往保存在其他路徑下,這兩者很少會重合,因此直接在cmd中運行java命令時,可能會出現找不到類的情況。盡管如此,使用javac編譯時仍然能夠識別到Java文件,但java命令卻會提示找不到主類,原因在於路徑設置不當。
除了路徑設置外,還有一種情況是,即使按照上述步驟操作後,問題仍然存在。這時可能是因為在修改環境變數後,需要重新啟動計算機以使新的設置生效。重啟計算機後,問題通常可以得到解決。
D. java編譯和運行。
首先cd到你java文件存放的目錄,比如你的java文件的名稱為helloworld.java,在cmd中輸入javac
helloworld.java
敲擊回車,這個命令會將你的java文件編譯成class文件,然後在cmd框中輸入java
helloworld敲擊回車就能運行你的java文件輸出結果
E. 請問java程序在編譯和運行時有什麼區別,系統分別都會做什麼
Java程序的編譯
使用命令: javac *.java
編譯時,會將寫的.java文件(高級語言),生成相應的位元組碼文件.class文件(二進制代碼)
Java程序的執行
使用命令:java *
流程: 載入到 -- 連接 ---- 初始化 ...
運行時,首先會由將相應的.class文件,載入到內存中,並驗證.class文件的有效性,將相應類的Class載入到內存中,並對類中的靜態變數進行初始化操作,然後就由 主 類開始執行
具體的可以看一下 JVM 類載入過程,以及jVM的內存分配機制