没有公共类的Java文件

6
我在Eclipse中创建了一个带有包修饰符的类。
class notPublic
{
  //main() which prints a string
}

我运行了这个程序,打印出了那个字符串。但是我有一个小疑问。

我读到过“Java编译单元必须有一个公共类”,但是我的编译单元没有公共类,但它仍然可以工作。

我对这里的理解错了什么吗?

2个回答

10
实际要求略有不同:每个Java公共类必须在编译单元中与名称PublicClassName.java相对应。 但是,拥有不包含公共类的编译单元是完全可以的。
我没有能够在语言规范中找到明确的说明,但是规范似乎提到了这一点作为将Java编译单元映射到文件系统的首选/推荐方式。

4
它的工作方式如下,想象一下你有一个名为Dog.java的文件,其内容如下:
class A{}

class B{}

class C{}

由于任何一个类都是公共的,因此您可以使用javac Dog.java编译它,这将起作用。

但是,如果您的其中一个类是公共类,则文件名必须与公共类相同,例如,如果您像下面这样修改最后一个示例: 文件 Dog.java

public class A{}

class B{}

class C{}

如果您尝试编译它,您将会得到"class A is public, should be declared in a file named A.java"的错误提示。

对于最后一点,您不能将所有类都声明为public,因为每个文件只能有一个public类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接