我有一个名为" test"并且有一个公共类,它包含一个名为ABC.java的文件中的main方法。
package test;
public class ABC{
public static void main(String[] args) {
new T1();
}
}
在同一个包装中"测试"我在名为T.java
package test;
class T1 {}
class T2 {}
当我尝试编译它时,它说无法找到符号new T1()
。当我将T1放在一个单独的文件T1.java
中时,它编译得很好。为什么java无法在同一个包中找到包私有类。
答案 0 :(得分:2)
如果找不到.class
个文件,javac将自动编译您正在编译的文件中使用的所有链接文件。就像你的情况ABC.java
一样。但有一点需要注意的是,javac不会搜索所有要编译的.java
扩展名的文件。但它会查找与该类同名的文件名。就像您的情况T1
。
因此,如果您将编译T.java
然后编译ABC.java
,它将按预期运行。但是如果您编译ABC.java
而不是T.java
编译器找不到T1.class
那么它会查找T1.java
,但它也找不到它,这会给你一个错误。另一方面,如果您将T.java
重命名为T1.java
,它将按预期工作。
答案 1 :(得分:0)
在Java
中,当类文件名( T1.java )与没有public
关键字的类名( T1 )相同时,这个类在这个包( test )的类下是公共的。