2014-10-17 235 views
0

假設我沒有使用任何IDE來構建/運行我的Java代碼。但使用記事本和命令提示符來編譯和運行。從另一個類訪問類

我可以有把握地認爲:只要我把同一個文件夾中我的類文件,他們將永遠能夠「看到」對方甚至沒有說明包

我來自另一個具有類似問題標題的鏈接:Accessing other class files in Java 但它提出了一個不同的問題,並且提供的回覆是在具有IDE的情況下使用IDE更改CLASSPATH。

我打算在這裏找到的是沒有IDE的JVM的行爲。

QUE:我可以安全地假定類可以總是通過只是將它們放在同一文件夾中「看到」對方?

+0

不可以。您不能安全地假定和導入不是可選的。 – 2014-10-17 12:57:39

+0

@ElliottFrisch你指的是哪些進口?謝謝 – user3437460 2014-10-17 13:01:40

+0

在你的問題中的那些; *即使沒有說明包?* – 2014-10-17 13:02:08

回答

0

這裏有一些食物對你的思念:-)

讓我們假設我們有相同的文件

版本1

package mypack; 

public class MyClass { 

    public static void main(String[] args) { 
     System.out.println(1); 
    } 

} 

版本2

package mypack; 

public class MyClass { 

    public static void main(String[] args) { 
     System.out.println(2); 
    } 

} 

編譯的兩個版本版本2像這樣

[[email protected] ~]$ javac mypack/MyClass.java 
[[email protected] ~]$ java mypack.MyClass 
2 

,然後創建一個版本1罐,並將其保存爲「myjar.jar」

現在就來試試

[[email protected] ~]$ java -cp myjar.jar:. mypack.MyClass 
1 

[[email protected] ~]$ java -cp .:myjar.jar mypack.MyClass 
2 

正如你所看到的,類加載器並不關心。它只需要第一堂課而忽略第二堂課。

所以這不是文件夾的問題。這是的問題。 JVM處理包,這些包可以位於組織目錄或jar內。

+0

java文件中沒有聲明包的情況如何?希望你能覆蓋那個。謝謝.. – user3437460 2014-10-17 13:12:13

+1

當你沒有聲明一個包時,你的類就在「默認包」中,這只是另一個包(沒有名字)。如果在任何地方沒有包聲明,Leo的例子仍然會表現相同。 – ohlec 2014-10-17 13:14:10

+0

你是對的,但你怎麼會有一個文件夾中的兩個類?這有點抽象,因爲其中一個類文件會覆蓋另一個文件,而將其複製到一個文件夾中。你的場景只能通過jar文件的幫助來實現。 – 2014-10-17 13:16:24