我可以编译一个名称与类不同的java文件吗?

Hul*_*ulk 23 java

有没有办法编译java程序而没有带有基类名的java文件名.

如果是这样,请解释..

小智 40

要回答这个问题,请看一下这个例子:
创建一个Sample.java文件

class A 
{ 
   public static void main(String args[])
   { 
      String str[] = {""}; 
      System.out.println("hi"); 
      B.main(str); 
   } 
} 
class B 
{ 
   public static void main(String args[]) 
   { 
     System.out.println("hello");
   }
} 
Run Code Online (Sandbox Code Playgroud)

现在你编译它javac Sample.java并运行,java A然后输出将是

hi 
hello
Run Code Online (Sandbox Code Playgroud)

或者你运行,java B然后输出将是
hello

请注意,没有标记任何类,public因此可以default访问它们.没有任何公共类的文件没有文件命名限制.

  • 这是有效的,因为'A'和'B'都不是公共类.如果是A,则必须在A.java中定义. (5认同)
  • 好答案。但是,现在不可能从其他软件包访问它们,因为它们不再是公共的:((( (2认同)

Ste*_*ker 31

您的Java文件名应始终反映该文件中定义的公共类.否则,您将收到编译器错误.例如,test.java:

public class Foo {}
Run Code Online (Sandbox Code Playgroud)

试图编译这个给出:

[steven@scstop:~]% javac test.java
test.java:1: class Foo is public, should be declared in a file named Foo.java
public class Foo {
       ^
1 error
Run Code Online (Sandbox Code Playgroud)

因此,您必须使您的文件名与您的公共类名称匹配,这似乎使您的问题没有实际意义.无论是那个还是我不明白你在问什么...花一些时间来解释你实际上想要实现的目标会对提出一个更有效的问题大有帮助:)

  • 不.编译器不允许你这样做.请不要试图绕过这个限制 - 正如其他人提到的那样Java是一个非常好的东西!如果您正在尝试实现某个特定目标,如果您更多地了解您要实现的目标,我们可以建议其他方法. (2认同)

小智 7

只要您的源文件中没有公共类,就可以将源文件命名为任何名称并进行编译.但是,如果源文件中有公共类,则该文件的名称应与类名相同.否则,编译器将抛出错误.

示例:
文件名:TestFileName.java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello,World\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

编译: javac TestFileName.java

错误:

TestFileName.java:1: class HelloWorld is public, should be declared in a file named HelloWorld.java
public class HelloWorld
       ^
1 error
Run Code Online (Sandbox Code Playgroud)