我能用一个不同于这个类的名字来编译一个java文件吗?

有没有什么办法可以编译一个Java程序,而无需具有其基类名称的Java文件名。

如果是这样,请解释..

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

public class Foo {} 

试图编译这个给出:

 [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 

所以你必须有你的文件名匹配你的公共类名,这似乎使你的问题没有意义。 无论是这个,或者我不明白你在问什么…花一些时间来解释你实际上想要达到的目标将会走很长的路要走一个更有效的问题:)

回答这个问题看看这个例子:
创build一个文件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"); } } 

现在你把它编译成javac Sample.java然后运行java A然后输出

 hi hello 

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

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

只要您的源文件中没有公共类,您可以将源文件命名为任何名称,并且可以编译。 但是,如果你的源文件中有一个公共类,那么这个文件应该和你的类名一样。 否则,编译器会抛出一个错误。

例:
文件名: TestFileName.java

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

编译: javac TestFileName.java

错误:

 TestFileName.java:1: class HelloWorld is public, should be declared in a file named HelloWorld.java public class HelloWorld ^ 1 error 

不,公共类名称必须与文件名称匹配。 内部,非公开,类名可能有所不同。

您必须具有与文件名称相同的公共类。 这是一件很好的事情。 只要不是公共的,你可以在同一个文件中有第二类。 他们仍然可以是“默认”,所以他们仍然可以被其他类在同一个包中使用。

这不应该在大多数情况下完成。 Java关于类和包的命名模式是它的更大优势之一 – 让程序员的生活更容易,而且不花钱。

是的,我们用一个不同于这个类的名字来编译一个java文件,只要这个文件中不应该有公共类。

如果文件中有公共类,那么在这种情况下,你必须把这个名字作为文件名。 但是,如果你的class级不包含任何公共class级,那么你可以给你任何名字上课。

请参考下面的例子来更加清楚:

文件名:sample.java

  class A { public static void main(String args[]) { System.out.println("hi in Class A"); } } class B { public static void main(String args[]) { System.out.println("hello in class B"); } } 

然后用(windows)编译它:javac sample.java

然后运行它:Java A

输出:hi在A类

然后运行它:java b

输出:在B类你好

请检查并确认。

您可以使用Java Compile API并编译您希望的任何Java源代码,源代码不一定来自文件,也可能来自具有不相关名称的文件。 这取决于你想要开发你的程序是多么的愚蠢。 ;)

我猜他的意思是.java文件的命名与其中定义的实际类不同。

我想这是不可能的。

不可以。您可以在编译之前编写一个shell脚本来重命名.java文件,但是javac要求filenames =类名称。

(在windows中,它是不区分大小写的,所以ASDF.java可以编译Asdf.class)

是的,你可以select文件(.java)的任何名称。 该文件中的类的名称无关,意味着类名可能与文件名完全不同。 你应该用文件名编译程序,并且应该使用main方法所在的类名来运行程序。 主要的方法可能在不同的类中是多个的,所以你应该使用你想运行的主要方法的类名来运行……

我们可以保存文件tootle类名的不同名称,因为在java中我们编译程序,但我们运行的方法。 我们必须用文件名编译我们的程序并运行我们的类名

是的,可以使用不同的文件名编译java源文件,但是您需要确保里面定义的类都不是public的…当您编译源文件时,源文件中类的对应.class文件被创build。

是的,你可以用任何其他的名字保存你的java源代码文件,与你的主类名不一样,但是当你使用它的时候,比字节代码文件名将和你的主类名相同。 所以为了方便您不要记住java代码运行的许多名字,您需要将您的文件名称与主类相同,只有您的文件名和字节代码文件具有相同的名称。

如果类不公开,可以使用其他名称来保存,比如classname是Simple,然后将其保存为Hard.java。 complie-> Hard.java run-> Simple.java只保存你的java文件.java。 编译javac .java运行java yourclassname例如,如果我的程序主类名是A,那么只保存.java
由javac .java编译
由java运行

是的,我们可以用一个不同于这个类的名字来编译一个java文件,前提是这个文件中不应该有公共类。

如果文件中有公共类,那么在这种情况下,你必须把这个名字作为文件名。 但是,如果你的class级不包含任何公共class级,那么你可以给你任何名字上课。

请参考下面的例子来更加清楚:

文件名:example.java

 class A { public static void main(String args[]) { System.out.println("You are in Class A"); } } class B { public static void main(String args[]) { System.out.println("You are in class B"); } } 

然后使用: javac example.java进行编译

然后运行它: java A

 output : you are in Class A 

然后运行它: java B

 output : you are in class B 

请检查并确认。

你可以在java中编写多个主要方法,因为java提供了main方法重载,而main方法也可以重载。 一旦你在这里编译文件example.java编译器创build.class文件,其中包含主要的方法,当你运行该文件与Java它会运行A.class文件,其中包含A类的主要方法,并将输出显示在你但是当你用java B运行这个文件时,它运行提供B类主要方法的B.class文件所以你的代码运行成功

根据其他答案,唯一可行的解​​决scheme是以某种方式确定来自源的类名 ,然后使用它将文件重命名为正确的名称并像往常一样编译。

是。 这可以做到。

类和文件名相同的主要原因是使编译器的工作易于检查它需要运行哪个类,在Java类的整个列表中。

因此,文件名和类名相同是一个好习惯。

如果在这个类中没有任何公共方法,则编译并运行一个不同于文件名的类。