疑わしい場合は、 を使用してjavapください。
Empty.java:
public class Empty {
public static void main(String[] args) {}
}
それで:
javac Empty.java
javap -v Empty.class
出力の抜粋:
public Empty();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
ハ!コンストラクターが生成されました。同じことを試してみると:
public class Empty {
public Empty() {}
public static void main(String[] args) {}
}
まったく同じバイトコードが表示されます。
これが Java のみの制限なのか、それともバイトコード レベルにも存在するのか、Is it valid to have a JVM bytecode class without any constructor? で質問しました。