从另一个类访问类
假设我没有使用任何IDE来构建/运行我的Java代码。但使用记事本和命令提示符来编译和运行。从另一个类访问类
我可以有把握地认为:只要我把同一个文件夹中我的类文件,他们将永远能够“看到”对方甚至没有说明包?
我来自另一个具有类似问题标题的链接:Accessing other class files in Java 但它提出了一个不同的问题,并且提供的回复是在具有IDE的情况下使用IDE更改CLASSPATH。
我打算在这里找到的是没有IDE的JVM的行为。
QUE:我可以安全地假定类可以总是通过只是将它们放在同一文件夹中“看到”对方?
这里有一些食物对你的思念:-)
让我们假设我们有相同的文件
版本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内。
java文件中没有声明包的情况如何?希望你能覆盖那个。谢谢.. – user3437460 2014-10-17 13:12:13
当你没有声明一个包时,你的类就在“默认包”中,这只是另一个包(没有名字)。如果在任何地方没有包声明,Leo的例子仍然会表现相同。 – ohlec 2014-10-17 13:14:10
你是对的,但你怎么会有一个文件夹中的两个类?这有点抽象,因为其中一个类文件会覆盖另一个文件,而将其复制到一个文件夹中。你的场景只能通过jar文件的帮助来实现。 – 2014-10-17 13:16:24
不可以。您不能安全地假定和导入不是可选的。 – 2014-10-17 12:57:39
@ElliottFrisch你指的是哪些进口?谢谢 – user3437460 2014-10-17 13:01:40
在你的问题中的那些; *即使没有说明包?* – 2014-10-17 13:02:08