關於java編譯通過,執行時出錯或找不到主類問題解決
剛接觸java,倒騰了半天設施好環境變數,控制檯輸入java、javac、java -version後,輸出正確。終於可以程式設計序了,很激動,於是直接從老師發的現成的程式碼包裡面考了一份(其實自己敲一個的話,就不用這麼費勁,話又說回來,如果自己敲一份的話,自己也不會發現這個問題)。
執行了 cd.. 、cd chapter1轉到所在資料夾
輸入 :javac Hello.java 成功編譯
緊接著輸入:java Hello 丟擲錯誤,無法載入主類,頓時心又涼了半截
在網上搜集本都是說環境變數classpath設定有誤,可是我檢查了好多遍,查了很多關於環境變數設定的具體操作,發現自己並沒有寫錯。最後找到錯誤之處是我碰巧撞上了,哈哈哈,算是運氣吧。在此分享一下。
原來的程式碼:
package chapter1.例子1; public class Hello{ public static void main (String args[]){ System.out.println("這是一個簡單的Java應用程式"); Student stu=new Student(); stu.speak("We are students"); } } class Student{ public void speak(String s){ System.out.println(s); } }
修改後:
public class Hello{
public static void main (String args[]){
System.out.println("這是一個簡單的Java應用程式");
Student stu=new Student();
stu.speak("We are students");
}
}
class Student{
public void speak(String s){
System.out.println(s);
}
}
可以發現只是刪除了這句話:
package chapter1.例子1;
為什麼會這樣?
首先,包名指的什麼,其實簡單理解包名就是一個又一個的資料夾,這些資料夾是巢狀關係,父資料夾和子資料夾之間用 '.'(英文句號)隔開。
如果一個類有包名,那麼就不能在任意位置存放它,否則虛擬機器將無法載入這樣的類。
如果有一個這樣的包名:package chapter1.例子1
那麼儲存檔案的目錄結構中必須含有如下結構:...\chapter1\例子1
按照這個原則修改資料夾
原儲存路徑:C:\chapter1\Hello.java
修改後:C:\chapter1\例子1\Hello.java
那含有包名的該怎麼編譯執行?
首先是編譯:在 Hello.java 所在的資料夾下編譯 javac Hello.java
然後執行之前,首先要轉到包所在資料夾,對於這個程式來說就是 C 盤
然後 輸入: java 包名.主類名(java chapter1.例子1.Hello)