簡體   English   中英

Java - 使用當前包中的非公共類會導致編譯錯誤

[英]Java - Use of nonpublic class from the current package makes compiling error

我有以下兩個源文件

文件World.java

package planets;

public class World {
    public static void main(String[] args) {
        Mars.land();
    }
}

文件Moon.java

package planets;

public class Moon {
    public static void land() {
        System.out.println("Hello Moon");
    }
}

class Mars {
    public static void land() {
        System.out.println("Hello Mars");
    }
}

我們可以看到, Moon.java包含兩個類:公共Moon類和非公共Mars類。

這些文件位於planets目錄內,下面是目錄樹

+current-dir:
+----+planets:
      +----+World.java
      +----+Moon.java

現在,如果我嘗試從Windows命令提示符(我在current-dir文件夾中)編譯進行編譯

javac planets\World.java

我收到此錯誤消息:

planets\World.java:5: error: cannot find symbol
       Mars.land();
       ^
  symbol:   variable Mars
  location: class World
1 error

這很奇怪,因為我知道編譯器在當前包的所有源文件中搜索非公共類。 也是Cay Horstmann的核心Java第1卷,第10版。 在第192-193頁說:

[...]您可以從當前包導入非公共類。 可以在具有不同名稱的源文件中定義這些類。 如果從當前包導入類,則編譯器將搜索當前包的所有源文件,以查看哪個類定義了該類。

此外,我嘗試使用Eclipse Oxygen編寫這些文件,並且編譯沒有問題。 但我知道Eclipse使用不同的編譯器。

為什么javac編譯失敗?

編輯:我沒有設置CLASSPATH變量。 所以默認編譯器在當前目錄中查找。

您需要按順序鍵入以下命令(在'current-dir'中)

  1. javac行星\\ Moon.java
  2. javac -cp。 行星\\ World.java
  3. java -cp。 planets.World

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM