2016-09-09 8 views
0

は、私は非常に単純なクラスがあります。私は、このクラスでjavap -cを実行すると理解てjavap出力

package MyDev; 

public class Point3D { 

    public Point3D(){x = 0; y = 0;z = 0;} 

    public float x, y, z; 
    public Point3D(float X, float Y, float Z) 
    { 
     x = X; y = Y; z = Z; 
    } 
} 

を、それは私が得るものです:

C:\Projects\Development\MyJava\bin\MyDev>"C:\Program Files (x86)\Java\jdk1.7.0_55\bin\javap" -c Point3D.class 
Compiled from "Point3D.java" 
public class MyDev.Point3D { 
    public float x; 

    public float y; 

    public float z; 

    public MyDev.Point3D(); 
    Code: 
     0: aload_0 
     1: invokespecial #12     // Method java/lang/Object."<init>":()V 
     4: aload_0 
     5: fconst_0 
     6: putfield  #14     // Field x:F 
     9: aload_0 
     10: fconst_0 
     11: putfield  #16     // Field y:F 
     14: aload_0 
     15: fconst_0 
     16: putfield  #18     // Field z:F 
     19: return 

    public MyDev.Point3D(float, float, float); 
    Code: 
     0: aload_0 
     1: invokespecial #12     // Method java/lang/Object."<init>":()V 
     4: aload_0 
     5: fload_1 
     6: putfield  #14     // Field x:F 
     9: aload_0 
     10: fload_2 
     11: putfield  #16     // Field y:F 
     14: aload_0 
     15: fload_3 
     16: putfield  #18     // Field z:F 
     19: return 
} 

なぜ? 2番目のコンストラクタに(FFF)Vではなくsignature()Vがあるのはなぜですか? 私の人生のために、私はそれを理解できません!

+0

Objectに '(float、float、float)'コンストラクタはありません。 –

答えて

4

それはObjectというコンストラクタへの呼び出しです。スーパークラスのコンストラクタへの呼び出しは、常にコンストラクタで発生する最初のものです。

+0

申し訳ありませんが、私のせいで、物事をより明確にするために-c -sで実行しているはずです。答えが受け入れられupvoted。 – Flot2011