我在eclipse中创建了一个包含修饰符的类。
class notPublic
{
//main() which prints a string
}
我运行了这个程序并打印了那个字符串。我在这里有一个小疑问
我读到Java compilation unit must have a public class
我有一个没有公共课的编译单元。但它的确有效。
我在这里错误地理解了什么
答案 0 :(得分:6)
实际要求略有不同:每个Java公共类必须位于名为PublicClassName.java
的编译单元中。但是有一个编译单元可以完成不包含公共类。
我无法在语言规范中找到明确的声明,但the spec does seem to mention it是将Java编译单元映射到文件系统的首选/推荐方法。
答案 1 :(得分:3)
它以下一种方式工作,假设您有一个名为 Dog.java 的文件,其中包含下一个内容:
class A{}
class B{}
class C{}
由于任何类都是公共的,你可以使用javac Dog.java编译它,它会起作用。
但如果您的某个类是公共的,则该文件的名称必须等于公共类,例如,如果您修改最后一个示例,如下所示:
档案Dog.java
public class A{}
class B{}
class C{}
你尝试编译它你会得到“ A类是公共的,应该在名为A.java的文件中声明”
最后一点,你不能将所有类都设置为公共类,因为每个文件只能有一个公共类。