java编译器创建了多少个文件?

时间:2012-03-21 11:30:56

标签: java javac

如果我编译一个类

class hussi
{
  public static void main(String args[])
  {
    System.out.println("hello java");
  }
}

我有除hussi.class文件以外的任何文件吗?
javac是否创建除.class文件以外的任何文件?

6 个答案:

答案 0 :(得分:5)

Java编译器为每个类创建.class。 Java文件可能包含至少1个类。它可以包含更多:顶级或内级。它还可以包含匿名内部类。编译器为每个这样的类创建单独的文件。

答案 1 :(得分:1)

java编译器为每个类生成一个文件,包括内部类(匿名或非匿名)。它们将始终是.class文件。

答案 2 :(得分:1)

每个类将获得一个.class文件。如果您有内部类,则每个.java文件最终可能会有多个.class文件。

答案 3 :(得分:1)

Java编译器只创建一个.class文件的文件。

但是你必须在java文件中有一个公共类来编译它,否则会发生错误,文件名必须与公共类名相同。

如果你在java文件中有一个以上的类,那么将创建更多的类文件。

答案 4 :(得分:1)

在这种情况下,

javac将创建一个.class文件。但是,如果您有内部类以及外部类的类文件,那么也将生成内部类的类文件


编辑:有一个更好的答案:https://stackoverflow.com/a/1031966/298455

答案 5 :(得分:1)

即使是package-info.java也会产生一个类。

/**
 * Javadoc for a package
 *
 * with an annotation.
 */
@Deprecated
package mypackage;

编译
$ javac package-info.java 
$ ls -l
total 8
-rw-rw-r-- 1 peter peter 180 2012-03-21 12:08 package-info.class
-rw-rw-r-- 1 peter peter  87 2012-03-21 12:08 package-info.java

$ javap -c -v -classpath .. mypackage.package-info
Classfile /d/peter/untitled/src/main/java/mypackage/package-info.class
  Last modified 21-Mar-2012; size 180 bytes
  MD5 checksum f152dc2e8a45929ef297f6ac05a4067e
  Compiled from "package-info.java"
interface mypackage.package-info
  SourceFile: "package-info.java"
  RuntimeVisibleAnnotations:
    0: #6()
  minor version: 0
  major version: 51
  flags: ACC_INTERFACE, ACC_ABSTRACT, ACC_SYNTHETIC
Constant pool:
  #1 = Class              #7              //  "mypackage/package-info"
  #2 = Class              #8              //  java/lang/Object
  #3 = Utf8               SourceFile
  #4 = Utf8               package-info.java
  #5 = Utf8               RuntimeVisibleAnnotations
  #6 = Utf8               Ljava/lang/Deprecated;
  #7 = Utf8               mypackage/package-info
  #8 = Utf8               java/lang/Object
{
}