反编译后无法在.class文件中看到Super()

sau*_*mar 1 java decompiling .class-file

 class p {
     p(){
         System.out.println("1");
     }
 }
class Student extends p{  
    Student() {
        super();
        System.out.println("2");
    }

    public static void main(String[] args) {
        Student s =  new Student();
    }
}
Run Code Online (Sandbox Code Playgroud)

因为我已经明确地提供了super(),但在使用jd-gui进行反编译之后,我无法看到我放置的super(),因为super()应该由编译器本身提供.我只是想看看这个,super关键字和其他东西是由编译器隐式提供的.我用Google搜索并发现.class文件我可以用jd-gui看到,但是我无法看到super()和this(),有没有其他相同的方法? 图片

Ian*_*rts 6

在Java中,任何不以显式super(...)this(...)链式构造函数调用开头的构造函数都会自动获取(等效的字节码)super();作为编译器的第一条指令.因此,当反编译器super()在构造函数的开头看到字节码时,它无法知道原始源代码super()是否包含显式或者编译器是否隐式插入了指令.两个版本都编译为相同的字节码,因此没有特别的理由让它优先于另一个.