我有一个程序,它使用名为JHelper的外部库,位于相邻文件夹
中home
|--lib
| |--JHelper.java
| `--JHelper.class
`--prj
`--HelloWorld.java
HelloWorld.java文件
//package prj
public class HelloWorld {
public static void main(String[] args) {
String echoed = JHelper.echo("Hello World");
System.out.println(echoed);
}
}
我可以通过在CLASSPATH中提供JHelper的位置来编译HelloWorld.java和javac一样,
PS ~\prj> javac -classpath ".;..\lib\" HelloWorld.java
但是,如果我将package prj
取消注释为HelloWorld.java,那么javac输出它无法找到符号JHelper
为什么让HelloWorld.java成为一个包阻止javac在CLASSPATH上找到JHelper?
答案 0 :(得分:1)
因为如果其他类A
与B
位于同一个包中,则类B
只能使用类A
而无需导入它(或整个包) (或在java.lang
包中)。
但是......你无法从默认包中导入类。
因此,遵循的简单规则是:永远不要将类放在默认包中。