在java中省略访问说明符
我知道java文件中声明的在java中省略访问说明符,java,class,access-specifier,Java,Class,Access Specifier,我知道java文件中声明的public类的名称必须与其文件名相同。但我想知道,这不是给我一个编译错误,而是它成功运行了 class Foo //<-- this can be any name... { public static void main(String[] args) { System.out.println("Hello World!"); } } class Foo/你的观察是正确的。如果该类不是公共的,则该类的名称不需要与文件名匹
public
类的名称必须与其文件名相同。但我想知道,这不是给我一个编译错误,而是它成功运行了
class Foo //<-- this can be any name...
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
class Foo/你的观察是正确的。如果该类不是公共的,则该类的名称不需要与文件名匹配。当文件中没有公共类时,可以随意命名文件
如果您说有一个源文件Test003.java,并在其中定义
两个非公共类AAA和BBB,没有编译
生成错误和两个类文件:AAA.class
和BBB.class
所以一切都很好。
01/20/2014 06:27 AM 238 AAA.class
01/20/2014 06:27 AM 238 BBB.class
是的,那很好。即使对于公共类,这也是编译器特定的可选限制
发件人:
如果且仅当包存储在文件系统(§7.2)中时,如果在由类型名加扩展名(如.java或.jav)组成的文件名下未找到类型,则主机系统可选择强制执行以下限制,即这是编译时错误,前提是满足以下任一条件:
- 该类型由声明该类型的包的其他编译单元中的代码引用
- 该类型被声明为public(因此可以从其他包中的代码访问)
请注意第二点-如果您的类不是公共的,则此限制不适用
编辑:从更新的问题
当同一个文件中有两个这样的类时会发生什么
类文件是基于类名生成的。main
方法的存在与此完全无关,原始源文件名也是如此。如果编译成功,肯定会生成一个类文件。如果没有重现问题的示例代码,我们无法判断到底发生了什么。在一个java文件中保留两个带有公共访问说明符的类。一个有主管道,一个没有主管道。您将收到警告或错误。@Rahul:我看不出这与问题有什么关系。@nitish712整个事件与是否存在主要方法无关。我将检查您更新的问题。@nitish712:请查看我的编辑,但请尽量在每篇文章中保留一个问题。这正危险地转向“我一直在想我想问的其他问题……”这是我的错。类文件已生成。