java編譯時運行時
你將cmd的當前目錄切換到了D盤(cd d:),然後使用命令行執行java hello,這里的hello應該是指你想要運行的類的完整名稱(包括包名),不應包含路徑。因此,如果你在後面添加了"d:",就會提示找不到主類,因為系統會將"d:\hello"誤認為是你想要運行的類名。實際上,你應該直接運行"java hello",這里的"hello"就是你的類名。
之所以要切換到D盤是因為你的類(hello)所在的目錄是"D:\",而Java在尋找類時會根據環境變數中的classpath進行查找。如果沒有設置classpath的話,默認情況下,它會在JDK包含的運行時環境目錄以及當前目錄(即".")查找。因此,如果你將"D:\"添加到classpath環境變數中,那麼你就可以在任何位置執行位於D盤的"hello.class"文件。反之,如果未設置classpath,則只能將cmd的目錄切換到hello.class所在的目錄,然後執行"java hello"。
這個過程可能有點復雜,但通過設置正確的classpath環境變數,你可以更方便地管理你的項目和類路徑。希望這些信息對你有所幫助。
另外,如果你已經正確設置了classpath,但仍然遇到找不到主類的問題,可能是因為你的類名或包名有誤,或者是類文件名和類名不匹配。請確保你的類文件名和類名完全一致,並且包聲明正確。
如果你在執行過程中遇到了其他問題,歡迎繼續提問。
Ⅱ java 程序怎麼編譯與運行啊
使用記事本編寫Java程序時,首先需要確保程序中包含一個主類,並且這個主類中定義了主方法。編寫完成後,可以將文件保存為與主類同名的文件,後綴名為.java。接下來,在命令提示符(DOS)環境下,切換到保存Java文件的目錄,使用javac命令進行編譯,例如:javac Main.java。如果編譯過程沒有出現錯誤提示,表示編譯成功。然後,使用java命令運行程序,例如:java Main。如果程序運行無誤,那麼程序的輸出結果將顯示在命令提示符窗口下方。
值得注意的是,運行Java程序時,應確保已經安裝了JDK,並配置好了環境變數。否則,可能會遇到找不到javac或java命令的情況。另外,編寫Java程序時,應盡量遵循良好的編程習慣,如合理命名變數、方法和類,保持代碼結構清晰等。這不僅有助於提高代碼的可讀性,也有利於後期維護。
此外,編譯和運行Java程序時,可能會遇到一些常見的錯誤,如語法錯誤、類型錯誤等。遇到這些問題時,需要仔細檢查代碼,找出錯誤的原因並進行修正。可以通過查閱官方文檔或在線資源來獲取相關幫助。
值得注意的是,Java程序的編譯和運行過程相對簡單,但要編寫出高效且功能強大的程序,則需要掌握更多Java語言的核心概念和高級特性。建議學習者在掌握基礎語法後,進一步學習面向對象編程、異常處理、多線程等高級主題,以提高編程技能。
總之,通過使用記事本編寫Java程序,並遵循正確的編譯和運行步驟,可以輕松地創建和運行簡單的Java程序。在學習過程中,不斷實踐和探索,將有助於提升編程水平。
Ⅲ Java編譯時註解和運行時註解有什麼區別
重寫,重載,泛型,分別是在運行時還是編譯時執行的
1. 方法重載是在編譯時執行的,因為,在編譯的時候,如果調用了一個重載的方法,那麼編譯時必須確定他調用的方法是哪個。如:
當調用evaluate("hello")時候,我們在編譯時就可以確定他調用的method #1.
2.
方法的重寫是在運行時進行的。這個也常被稱為運行時多態的體現。編譯器是沒有辦法知道它調用的到底是那個方法,相反的,只有在jvm執行過程中,才知曉到底是父子類中的哪個方法被調用了當有如下一個介面的時候,我們是無法確定到底是調用父類還是子類的方法
3.
泛型(類型檢測),這個發生在編譯時。編譯器會在編譯時對泛型類型進行檢測,並吧他重寫成實際的對象類型(非泛型代碼),這樣就可以被JVM執行了。這個過程被稱為"類型擦除"。
類型擦除的關鍵在於從泛型類型中清除類型參數的相關信息,並且再必要的時候添加類型檢查和類型轉換的方法。
類型擦除可以簡單的理解為將泛型java代碼轉換為普通java代碼,只不過編譯器更直接點,將泛型java代碼直接轉換成普通java位元組碼。類型擦除的主要過程如下:
1). 將所有的泛型參數用其最左邊界(最頂級的父類型)類型替換。
2). 移除所有的類型參數。
在編譯後變成:
4. 註解。註解即有可能是運行時也有可能是編譯時。
如java中的@Override註解就是典型的編譯時註解,他會在編譯時會檢查一些簡單的如拼寫的錯誤(與父類方法不相同)等
同樣的@Test註解是junit框架的註解,他是一個運行時註解,他可以在運行時動態的配置相關信息如timeout等。
5. 異常。異常即有可能是運行時異常,也有可能是編譯時異常。
RuntimeException是一個用於指示編譯器不需要檢查的異常。RuntimeException
是在jvm運行過程中拋出異常的父類。對於運行時異常是不需要再方法中顯示的捕獲或者處理的。
已檢查的異常是被編譯器在編譯時候已經檢查過的異常,這些異常需要在try/catch塊中處理的異常。
6. AOP. Aspects能夠在編譯時,預編譯時以及運行時使用。
1).
編譯時:當你擁有源碼的時候,AOP編譯器(AspectJ編譯器)能夠編譯源碼並生成編織後的class。這些編織進入的額外功能是在編譯時放進去的。
2). 預編譯時:織入過程有時候也叫二進制織入,它是用來織入到哪些已經存在的class文件或者jar中的。
3). 運行時:當被織入的對象已經被載入如jvm中後,可以動態的織入到這些類中一些信息。
7. 繼承:繼承是編譯時執行的,它是靜態的。這個過程編譯後就已經確定
8. 代理(delegate):也稱動態代理,是在運行時執行。
Ⅳ jvm如何在運行時動態把java文本編譯成class,然後載入到jvm
為了在Java程序運行時動態編譯Java源代碼並生成Class文件,避免將編譯產物存到文件中,可以採用特殊的方法,例如自定義實現JavaFileManager和JavaFileObject。這類操作較為復雜,但提供了一種靈活的解決方案。
實現策略可以分為兩步:首先在運行時編譯Java源代碼,獲取編譯後的位元組碼;其次,使用自定義類載入器在運行時定義這些類。通過這種方式,無需文件操作,直接在內存中完成編譯與載入過程。
在使用編譯器API進行動態編譯時,可以遵循上述步驟。涉及的關鍵類JavaFileManager和JavaFileObject需要自定義實現,以滿足特定的文件管理需求。
然而,在嘗試使用Java11環境下運行上述代碼時,可能會遇到編譯失敗的問題,而Java8環境下則能正常運行。具體原因尚未查明,可能涉及Java版本的兼容性或API實現細節的變動。
Ⅳ java程序編譯通過但是運行時顯示「找不到或無法載入主類 helloworld 」 ,怎麼解決
既然javac編譯已經通過,這說明變數java-home已經配置的沒有問題了。
(java-home對應的變數值為javac.exe所在的路徑;一般是在安裝路徑下,例如c:Program FilesJavajdk1.7.0_45in)。
那第一種可能就是:問題就出在Path變數對應的變數值上或者是新建用戶變數classpath上有問題,你重新配置一下。Path對應的變數值是在原來的變數值前面加上%Java_Home%。
第二種可能就是:你的環境變數都是正確的,只是你編譯的java源文件中,主函數public static void main(String args[]){}沒有寫在main這個類中。
一個java源文件可以寫很多類,編譯的時候javac源文件之後,每個類生成一個class文件。你去運行的時候,並不一定是去java源文件名,而是去java主函數所在的那個類名。
第三種可能就是:像intopass說的那樣,你在eclipse寫的時候裡面會有package,你把它刪掉試試。
Ⅵ Java創建對象是在編譯時還是在運行時
運行期。編譯好的java程序(即.class文件)需要運行在JVM中。程序,無論代碼還是數據,都需要存儲在內存中。JVM為java程序提供並管理所需要的內存空間。JVM內存分為"堆"、"棧"、"方法區"三個區域,分別用於存儲不同數據。首先JVM會檢查創建這個對象的類是否是一個以前從沒有見過的類型,如果不是,JVM將為其分配內存,如果是,java虛擬機將調用具體的ClassLoader找到對應的.class文件,並將這個文件的內容讀到內存中去。
1)堆:
1.1)用於存儲所有new出來的對象(包括成員變數)。
1.2)垃圾:沒有任何引用所指向的對象。
垃圾回收器(GC)不定時到內存中清掃垃圾,
並不一定一發現垃圾就立刻回收,
回收過程是透明的(看不到的),
通過調用System.gc()可以建議虛擬機盡快調度GC來回收。
1.3)內存泄漏:不再使用的內存沒有被及時的回收。
建議:不再使用的對象,及時將引用設置為null。
1.4)成員變數的生命周期:
創建對象時存儲在堆中,對象被回收時一並被回收。
2)棧:
2.1)用於存儲正在調用的方法中的所有局部變數(包括參數)
2.2)JVM會為每一個正在調用的方法分配一塊對應的棧幀,
棧幀中存儲方法中的局部變數(包括參數),
方法調用結束時,棧幀被清除,局部變數一並被清除。
2.3)局部變數的生命周期:
調用方法時存在棧中,方法結束時與棧幀一並被清除。
3)方法區:
3.1)用於存儲.class位元組碼文件(包括方法)。
3.2)方法只有一份,通過this來區分具體的對象。
既然對象在堆中創建,因此Java創建對象是在運行時,而不是編譯時。
Ⅶ 我寫了個java代碼,編譯沒有問題,但是執行的時候就出了一堆亂七八糟的代碼,這是怎麼回事
原因是你編譯使用的javac,把代碼編譯成版本61的class,而你的運行環境java,是一個老版本,能執行的上限是52版本。
解決方法有兩個:
1,安裝和JDK相同版本的Java運行時(JRE),並正確設置PATH變數。驗證方法是:
在黑窗口裡分別輸入java -version和javac -version,兩個版本要一致,或者java的版本更高。
相關命令截圖如下:
Ⅷ java編譯通過,為什麼運行卻提示找不到或無法載入主類
初學編程時,可能會遇到這樣一個問題:編寫好的Java代碼能夠通過編譯,但在運行時卻提示「找不到或無法載入主類」。這種情況讓人困惑不已。經過一番排查,發現這主要是由於環境配置和路徑設置不當引起的。
首先,需要確保在編譯Java代碼時正確設置了類路徑(classpath)。在設置classpath時,應在最前面添加本目錄路徑,用"."表示。若後面還有其他路徑,如dt和tools路徑,則應在"."後面加";"進行分隔。
其次,在cmd命令行中運行javac和java命令時,必須在Java源文件所在的目錄下進行。這樣編譯生成的class文件也會存放在該目錄下,當執行java命令時,程序會優先在本目錄下尋找相應的class文件,從而避免找不到類的問題。
值得注意的是,cmd的運行路徑通常默認為C:\個人文件夾,而Java源文件往往保存在其他路徑下,這兩者很少會重合,因此直接在cmd中運行java命令時,可能會出現找不到類的情況。盡管如此,使用javac編譯時仍然能夠識別到Java文件,但java命令卻會提示找不到主類,原因在於路徑設置不當。
除了路徑設置外,還有一種情況是,即使按照上述步驟操作後,問題仍然存在。這時可能是因為在修改環境變數後,需要重新啟動計算機以使新的設置生效。重啟計算機後,問題通常可以得到解決。