从另一个类访问类

问题描述:

假设我没有使用任何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

这里有一些食物对你的思念:-)

让我们假设我们有相同的文件

版本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