[英]First Java Program - Exception in thread “main” java.lang.NoClassDefFoundError
[英]'Exception in thread “main” java.lang.NoClassDefFoundError' when running java program from command line
我在這做錯了什么:
class Helo {
// main: generate some simple output
public static void main (String[] args) {
System.out.println ("Hello, world."); // print one line
System.out.println ("How are you?"); // print another
}
}
當我進入終端時,我做:
cd ~
javac Atempt2.java (//that's the file name)
java Atempt2
然后它給了我這個錯誤信息:
Exception in thread "main" java.lang.NoClassDefFoundError: Atempt2
總而言之,這就是我所做的和所發生的事情:
david-allenders-macbook-pro:~ davidallender$ cd ~
david-allenders-macbook-pro:~ davidallender$ javac Atempt2.java
david-allenders-macbook-pro:~ davidallender$ java Atempt2
Exception in thread "main" java.lang.NoClassDefFoundError: Atempt2
david-allenders-macbook-pro:~ davidallender$
我是新手,所以請以非常簡單的方式解釋一下。
謝謝。
自從我完成任何java工作以來已經有一段時間了,但我很確定你的類名需要與你的文件名相匹配。
javac使用類名生成輸出而不是文件名。 因此它將生成一個Helo.class類文件。
java將取一個類名並在相應的類文件中調用main函數,這里是Hello.class。
拋出ClassNotFoundError是因為javac從未生成Atemp2類文件,因為源文件中沒有Atemp2類。
更改:
class Helo
至
class Atempt2
在您的源文件中。
聲明類的.java文件必須具有與聲明的類名匹配的文件名。
文件名必須與文件中定義的public class
的名稱匹配。 在這種情況下,您要么必須將文件命名為“Helo.java”,要么將該類重命名為Atempt2
。
這是從java編程開始的非常基礎。你編寫的任何程序文件的名稱必須與程序的公共類匹配。 在你的程序中,文件的公共類是Helo,所以你的文件名必須是Helo.java.Here編譯器能夠編譯但JVM將搜索Helo.class文件來運行。 因為沒有Helo.class文件,你在線程“main”中得到運行時異常異常java.lang.NoClassDefFoundError:Atempt2
補充約瑟夫的回答。
編譯器的參數( javac
)是要編譯的文件的名稱(正如您所做的那樣)。
另一方面,虛擬機( java
)獲取要執行其main
方法的類的名稱。
一種選擇是
javac Atempt2.java // the file name
java Helo // the class name
通常,將文件命名為與類相同的方式是個好主意。 對於public class
這是必須的(由編譯器檢查)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.