2017-04-17 108 views
0

我想了解Java包。爲什麼javac在同一個包中找不到我的類文件?

我有兩個類,A.java和B.java,在同一個包中。 A類參考B類。

兩者都有包裝語句package world.example;並保存在目錄.../world/example/

乙編譯好的,但在嘗試編譯時的javac未能找到類文件爲B.

我試圖從/world父以及來自/example運行javac的。我在這裏和其他地方搜索了很多答案,但都無濟於事。關於類似主題的大多數問題似乎都有許多無關的代碼和信息,所以我試圖將我的問題歸結爲它的骨頭,但仍然看不到我缺少的東西。

附錄:如果我刪除了包語句,兩個類都編譯好,只要我在編譯A時指定類路徑,即:javac -classpath . A.java

代碼如下:

package world.example; 

public class A {  
    public static void main(String[] args) { 
    String msg = B.getMessage(); 
    System.out.println(msg); 
    }  
} 

......還有......

package world.example; 

public class B {  
    protected static String getMessage() { 
     return "Hello world!"; 
    }  
} 

...和javac的輸出...

17-04-17◆23:03 example »javac B.java 
17-04-17◆23:04 example »javac A.java 
A.java:5: error: cannot find symbol 
     String msg = B.getMessage(); 
        ^
    symbol: variable B 
    location: class A 
1 error 
17-04-17◆23:04 example »javac -classpath . A.java 
A.java:5: error: cannot find symbol 
     String msg = B.getMessage(); 
        ^
    symbol: variable B 
    location: class A 
1 error 
+0

從包含子目錄「word」的目錄編譯它們。 也就是說javac word/example/A.java –

+0

如果您轉到'world'的父項並鍵入'javac world/example/*。java',會發生什麼? –

回答

0
I have two classes, A.java and B.java, in the same package. Class A references class B 

你必須做實際的分離方式來分離你的.java文件和.class文件。

重複我的整個編譯過程。

首先,在編譯CMD中的.java文件時使用此命令,以便將.java文件與.class文件分開並避免混淆。

javac -d Target_Location Filename.java >>>> Spaces are important 

Target_location = C:\等等\等等<您希望您的包/類目錄是在<

編譯你會得到您的選擇而在Target_Location類文件後。之前。所以,現在您必須將您的classpath環境變量更改爲該目標位置,因爲您已經提供了第三方包。

執行並看到。

如何在CMD中設置你的類路徑。

​​
相關問題