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

时间:2009-12-03 18:20:32

标签: java

有没有办法在没有java文件名及其基类名的情况下编译java程序。

如果是,请解释..

20 个答案:

答案 0 :(得分:34)

要回答这个问题,请看一下这个例子:
创建一个文件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访问权限。没有任何公共类的文件没有文件命名限制。

答案 1 :(得分:25)

您的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

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

答案 2 :(得分:7)

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

例:
文件名:TestFileName.java

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

编译:{{1​​}}

错误:

javac TestFileName.java

答案 3 :(得分:3)

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

答案 4 :(得分:2)

您必须拥有与文件名同名的公共类。这是一件非常好的事。只要它们不是公共的,您就可以在同一个文件中包含辅助类。它们仍然可以是“默认”,因此它们仍然可以被同一个包中的其他类使用。

大部分内容都不应该这样做。 Java关于类和包的命名模式是它拥有的更大优势之一 - 使程序员的生活变得更加轻松。

答案 5 :(得分:2)

您可以使用Java Compile API并编译您希望的任何Java源,源不需要来自文件,也可以来自具有不相关名称的文件。这取决于你想要开发程序的程度。 ;)

答案 6 :(得分:2)

是的,我们编译一个名称与类不同的java文件,前提是该文件中不应该有任何公共类。

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

请参考以下示例,以便更清楚:

文件名: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

输出:你好,在A班

然后运行它:java B

输出:你好在B级

请检查并确认。

答案 7 :(得分:0)

即使没有名称(简单地 ".java" ),您也可以拥有自己的 java 文件。唯一的问题是您的文件中不应包含任何公共类。

答案 8 :(得分:0)

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

我想这是不可能的。

答案 9 :(得分:0)

按照惯例,主类的名称应与保存程序的文件的名称相匹配。您还应该确保文件名的大写字母与类名匹配。

文件名对应于类名的约定似乎是任意的。但是,此约定使维护和组织程序更加容易。此外,在某些情况下,这是必需的。

答案 10 :(得分:0)

是。这可以做到。

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

因此,将文件名和类名称保持一致是一种很好的做法。

你已经编译并运行了一个除了文件名以外的其他名称的类,如果你在这个类中没有任何公共方法。

答案 11 :(得分:0)

根据其他答案,唯一可行的解​​决方案是somehow determine the classname from the source,然后使用它将文件重命名为正确的名称并照常编译。

答案 12 :(得分:0)

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

答案 13 :(得分:0)

是的,我们可以使用与该类不同的名称编译一个java文件,前提是该文件中不应该有任何公共类。

如果文件中有任何 public 类,那么在这种情况下,您必须将该名称作为文件名。但是,如果您的课程不包含任何公开课程,那么您可以为您的课程提供任何名称。

请参考以下示例,以便更清楚:

文件名: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

请检查并确认。

答案 14 :(得分:0)

如果class不是public,你可以使用其他名称保存它,如果classname为Simple,则将其保存为Hard.java。 complie-&G​​T; Hard.java 游程> Simple.java 仅通过.java保存您的java文件。 编译javac .java 运行java yourclassname 例如,如果我的程序主类名是A然后 仅由.java保存 由javac .java编译 由Java A运行

答案 15 :(得分:0)

是的,您可以使用任何其他名称保存您的java源代码文件,与您的主类名称不同,但是当您编辑它时,字节代码文件名将与您的主类名相同。因此,为了方便您不要记住许多名称的java代码运行,您需要使您的文件名与主类相同,而不仅仅是您的文件名和字节代码文件将具有相同的名称。

答案 16 :(得分:0)

是的,可以编译一个具有不同文件名的java源文件,但是你需要确保里面定义的所有类都不公开...当你编译源文件时,里面类的相应.class文件源文件已创建。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

答案 19 :(得分:0)

没有。在编译之前,您可以编写一个shell脚本来重命名.java文件,但javac需要filenames = class names。

(同样在windows中,它不区分大小写,因此ASDF.java可以编译Asdf.class)