如果我编译一个类
class hussi
{
public static void main(String args[])
{
System.out.println("hello java");
}
}
我有除hussi.class文件以外的任何文件吗?
javac是否创建除.class文件以外的任何文件?
答案 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
{
}