2016-09-09 3 views
0

Ich habe eine sehr einfache Klasse haben:Verständnis javap Ausgabe

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; 
    } 
} 

Als ich javap -c auf dieser Klasse laufen, ist das, was ich bekommen:

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 
} 

Warum? Warum hat der zweite Konstruktor eine Signatur() V zu, statt (FFF) V? Für das Leben von mir kann ich das nicht verstehen!

+0

Es gibt keinen '(float, float, float)' -Konstruktor für Object. –

Antwort

4

Das ist der Aufruf an den Konstruktor von Object. Der Aufruf des Superklassenkonstruktors ist immer das Erste, was in einem Konstruktor passiert.

+0

Sorry, meine Schuld, hätte es mit -c -s laufen lassen sollen, um die Dinge klarer zu machen. Antwort akzeptiert und upvoted. – Flot2011