首页 > 其他 > 详细

this关键字详解

时间:2020-12-28 21:42:02      阅读:37      评论:0      收藏:0      [点我收藏+]

this关键字代指当前对象,可在方法中区分全局变量和局部变量

public class ThisTest {

    private int age;

    public ThisTest(){
        System.out.println("我是空参");
    }

    public ThisTest(int age){
        this.age = age;
        System.out.println("我是实参");
    }
}

this关键字除了可以区分变量,还可以在构造函数中被调用,减少构造函数中重复的代码

public class ThisTest {

    private int age;

    public ThisTest(){
        System.out.println("我是空参");
    }

    public ThisTest(int age){
        //调用空参构造函数
        this();
        this.age = age;
        System.out.println("我是实参");
    }

    public static void main(String[] args) {
        new ThisTest(12); //先打印‘我是空参‘,再打印‘我是实参‘
    }
}

在类加载的过程中,会生成两个方法,一个是clinit()方法,用来初始化静态变量;另一个是init()方法,在new 对象的时候被调用,默认是空参构造函数,那么,如果有多个构造函数,并且又面临在构造函数中调用其他构造函数方法的情况,init()方法如何生成?

还是使用ThisTest类来验证:

public class ThisTest {

    private int age;

    public ThisTest(){
        System.out.println("我是空参");
    }

    public ThisTest(int age){
        this();
        this.age = age;
        System.out.println("我是实参");
    }

    public static void main(String[] args) {
        new ThisTest(12);
    }
}

使用jclasslib反编译得到:

技术分享图片

可见生成的字节码里面有两个init()方法,所以可以得知,当Java前端编译器(也就是我们经常说的编译器)把文件进行编译后,会针对不同的构造函数生成不同的init()方法,声明了多少个构造函数就生成多少个重载的init()方法

再看反编译后的方法的调用指令:

技术分享图片

可以看出构造方法之间的调用编译过后就是生成的init()方法的调用!!!

this关键字详解

原文:https://www.cnblogs.com/muhexiong/p/14203028.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!