2016-09-09 3 views
0

У меня есть очень простой класс:Понимание вывода 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; 
    } 
} 

Когда я бегу javap -c на этом классе, то есть то, что я получаю:

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 
} 

Почему? Почему у второго конструктора есть подпись() V, а не (FFF) V? За жизнь меня я не могу этого понять!

+0

Нет конструктора '(float, float, float)' Object. –

ответ

4

Это призыв к конструктору Object. Вызов конструктора суперкласса всегда является первым, что происходит в конструкторе.

+0

Извините, я виноват, должен был запустить его с -c -s, чтобы сделать все более ясным. Ответ принят и поддержан. – Flot2011