Java命令運行class文件,報「找不到或沒法加載主類」錯誤

在使用命令行進行java程序的編譯和運行時,報「 找不到或沒法加載主類」的錯誤。html

首先,在ide中是能夠正常編譯和運行的。查找了部分的解決方案,不少人提供的思路是環境變量設置有誤,但檢查java

環境變量等均無問題,在參閱了文章:ide

http://www.cnblogs.com/wangxiaoha/p/6293340.htmlthis

以後,發現產生錯誤的緣由是對package,類路徑以及java編譯器及虛擬機查找文件的模式不理解,以致命令行輸入混亂。進而查閱書籍,在《Java核心技術卷1》中對Windows系統下使用命令行運行java程序,類路徑以及包之間的關係有較爲詳細的闡述,整體來講有一下幾點須要注意。spa

1.編譯器在編譯源文件的時候不檢查目錄結構。可是若是包和目錄不匹配,虛擬機就找不到類。命令行

因此在出現問題後,發現編譯總能經過,可是運行時會報錯。3d

2.編譯器對文件進行操做,而java解釋器加載類code

eg:javac com/mycompany/PayrollApp.javahtm

  java com.mycompany.PayrollAppblog

Oracle官方也提出了初學者易犯的錯誤就包括使用java xx.class的形式運行程序

A common mistake made by beginner programmers is to try and run the java launcher on the .class file that was created by the compiler. For example, you'll get this error if you try to run your program with java HelloWorldApp.class instead of java HelloWorldApp. Remember, the argument is the name of the class that you want to use, not the filename.

3.javac編譯器老是在當前目錄查找文件,可是Java虛擬機盡在類路徑中有"."目錄的時候纔看當前目錄。若是沒有設置類路徑也不會有什麼問題,默認的類路徑包含"."目錄,然而設置了類路徑卻忘記包含"."目錄,程序任可經過編譯可是沒法運行。

第三條是致使今天發現的錯誤的直接緣由

當咱們沒有在程序中定義package的時候,直接在文件目錄下進行編譯和運行並不會出現問題

當咱們加上package後

咱們能夠經過編譯可是沒法運行,這就是類路徑與目錄不匹配形成。

 

按照第三條中的描述,添加了"."的包,讓解釋器在demo目錄下搜索文件,問題解決。

相關文章
相關標籤/搜索