記一次解決cmd中執行java提示"找不到或沒法加載主類"的問題

今天遇到一個問題:在cmd命令行中,用javac編譯java文件能夠成功,可是用java執行卻提示「找不到或沒法加載主類」。現將該問題的緣由以及解決辦法記錄一下。html

先理解一下系統變量path和classpath的做用。java

path:可執行命令的搜索路徑,在該路徑下搜索能夠運行的程序或批處理文件。
  命令行中輸入一個命令,則會在path配置的目錄中查找該命令,若是存在則調用該程序運行,若是不存在則提示「 'XXX' 不是內部或外部命令,也不是可運行的程序或批處理文件。」
  若是要想在cmd中執行java,則須要把java.exe 配置在path系統變量中。因爲cmd會搜索path中目錄下的文件,所以在實際配置的時候,只須要把../jre/bin 配置到path中便可。這樣,在執行java時,操做系統便會自動在../jre/bin 目錄下搜索java.exe 可執行程序了。jvm

classpath: 類文件(*.class/*.jar)的存儲路徑。
  java 命令執行時,會讀取classpath中配置的目錄,而後在該目錄下去搜索將要執行的.class文件。若是未搜索到,則會報「找不到或沒法加載主類」錯誤,若是搜索到,則繼續運行。
  例如:執行命令 java Hello;
    則java程序會去在classpath配置的全部目錄和文件中取搜索Hello.class文件,找到以後會把該class文件加載到jvm中,爲後面的運行作準備。
  classpath這個系統變量只是爲java使用的,其餘程序不會使用該變量。spa

如上所說,java執行時,會在classpath中搜索 XXX.class 文件,若是找不到則報出"找不到或沒法加載主類"的錯誤。那麼在cmd運行的時候,咱們會隨意的在某個目錄下面javac編譯,而後java運行程序,那麼,該目錄未配置到classpath中,java程序又是如何找到該目錄的呢?操作系統

還記得配置classpath的時候,有一個".;"的配置項嗎?其表明的就是執行java命令是的所在目錄,也便是當前目錄。這樣便是把當前目錄加入了classpath,所以java執行的時候,會在當前目錄中搜索XXX.class 的。命令行

注意,當配置 .; 的時候,必定要注意前面是否是還有其餘配置。classpath中多個目錄要以;分割,而這裏的"."是一個配置項,表明的當前目錄,因此,若是"."前面有其餘的配置項,則前面一樣須要加入";"。
  例如:
    "."前面有其餘配置項,則這樣配: ...\bin;.;%JAVA_HOME%\bin.......
    "."前面無其餘配置項(也便是classpath是以.開始的),則這樣配:   .;%JAVA_HOME%\bin.......
  注意,在配置的時候必定要肯定究竟是";.;"仍是".;", 不然若是配成...\bin.;%JAVA_HOME%\bin.......則就會發生:可以javac編譯成功,可是java卻沒法執行成功的錯誤。htm

 另:用戶變量會覆蓋掉系統變量blog

  環境變量不區分大小寫get

===============================================cmd

原文連接:記一次解決cmd中執行java提示"找不到或沒法加載主類"的問題 轉載請註明出處!

===============================================

---end--

相關文章
相關標籤/搜索