不,编译器生成它们:
我创建了文件A.java:
public class A{
public String t(){return "";}
}
然后:
javac A.java
并运行javap -c A来查看内容:
Compiled from "A.java"
public class A {
public A();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
public java.lang.String t();
Code:
0: ldc #2 // String
2: areturn
}
如果我添加构造函数:
public A(){}
结果是:
Compiled from "A.java"
public class A {
public A();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."":()V
4: return
public java.lang.String t();
Code:
0: ldc #2 // String
2: areturn
}
它是一样的我使用的是64位OpenJDK的Java 7,但我敢打赌,它与所有的版本是一样的.
编辑:事实上,单独的字节码不能保证信息不作为元数据存在.使用十六进制编辑器和this program可以看到有两个字节不同,并且对应于行号(用于打印堆栈跟踪),因此在这种情况下不存在该信息.