使用java命令運行class文件提示「錯誤:找不到或沒法加載主類「的問題分析

有時候咱們須要直接用jdk提供的java命令來執行class文件讓軟件運行起來,特別是不少初學者,但常常會發現以下提示:java

用eclipse或用ant則沒有問題。app

其實緣由很簡單,咱們忽略了2個細節。eclipse

1.java指令默認在尋找class文件的地址是經過CLASSPATH環境變量中指定的目錄中尋找的。blog

2.咱們忽略了package的影響。ip

第一個問題好解決:編譯

咱們直接在CLASSPATH環境變量中加入「.;」便可。「.」的意思是搜索當前目錄class

第二個問題看下面分析:基礎

看下面兩個類變量

  

                   類A                                                                   類Bcli

類A和類B的惟一差異就是沒有定義包名。

咱們的工程路徑是D:\HelloWorld,在HelloWorld文件夾中創建一個src文件夾,類B的源代碼文件就放在src中。用javac編譯完之後

會在src文件夾中生成NewsManager.class,以下

執行以下:

 如今咱們再把源代碼換成類A

爲何加入了package後就不對了呢?

類A中package的路徑是org.will.app.main。按照java規定,咱們應該按照package定義的路徑來存放源文件,類A應該放入:

src\org\will\app\main下,以下:

而後咱們編譯執行:

依然有問題,爲何,其實你們再回去看看java的書籍就會發現,一個類的全名應該是包名+類名。類A的全名:org.will.app.main.NewsManager

好的,再試試:

仍是不對。爲何?

仔細看上面的圖,咱們在main目錄下讓java命令去執行org.will.app.main.NewsManager,其實它會覺得類的路徑是:

D:\HelloWorld\src\org\will\app\main\org\will\app\main\NewsManager,你們看到了吧,路徑重複了。

因此,咱們應該這樣執行:

成功!

總結:

1、java執行class文件是根據CLASSPATH指定的地方來找,不是咱們理解當前目錄。若是但願它查詢當前目錄,須要在CLASSPATH中加入「.;」,表明當前目錄。

2、java執行class文件對package的路徑是強依賴的。它在執行的時候會嚴格以當前用戶路徑爲基礎,按照package指定的包路徑轉化爲文件路徑去搜索class文件。各位同窗之後注意就OK啦。至於網上說的要在CLASSPATH要加各類包等等都是泛泛而談,真正靜下心分析這個問題的資料很少。不少都沒有說到點子上,會誤導人的。

相關文章
相關標籤/搜索