this关键字的介绍

this 关键字

  特点:this代表其所在函数所属对象的引用
  换言之:this 代表本类对象的引用。

  什么时候使用this关键字呢?
  当在函数内需要用到调用函数的对象时,就用this。

使用场景

  当成员变量和局部变量重名,可以用关键字this来区分

  this:代表对象,代表哪个对象呢?当前对象
        this就是所在函数所属对象的引用。
        简单说:哪个对象调用了this所在的函数,this就代表哪个对象。
class  Person{
    private String name;
    private int age;

    Person(String name){ //为了增加代码的阅读性,我们取变量名的时候,要有实质意义,
        //name=name;//这样的赋值时赋值给栈中的name,而不是给堆中的,要明确给堆中的使用this关键字
        this.name=name;

        /**当Person的构造函数为name=name的时候。
        speak函数打印的结果是null:0;

        当Person的构造函数为this.name=name的时候。
        speak函数打印的结果为旺财:0。*/
    }

    void speak(){
        System.out.prinln(name+":"+age);
    }

    public static void main(String[] args){
        Person O=new Person("旺财");
        O.speak();
        /**
         在内存中的运行原理:
          1:main函数进栈,产生o,然后在堆中产生地址(假设地址:0X0045),在堆中有name,age,进来分别赋值为null,0;
          2:Servle1(name)进栈,把"旺财"给传进去,然后在构造函数中,有this关键字通过地址来
          区分到底是给那个一个对象进行赋值,赋值完之后,就执行return弹栈,
          3.然后在产生的o对象,就会指向开始产生的地址(假设地址:0X0045)

          4.然后speak就会进栈,其实name,age前面都是省略了this关键字,this.name,的意思就是当前对象的姓名(其实就是地址里面的姓名)*/
    }
}

this关键字也可以使用在构造函数中调用其他构造函数。

class Person{
    private String name;
    private int  age;
    Eight1(){
        name="baby";
        age=1;
        System.out.println("Person run");
    }

    Eight1(String name){
        this.name=name;

    }
    Eight1(String name,int a){
        this(name);     //为了提高代码的复用性,我们不写this.name=name;因为上面有这句代码的初始化动作
        this.age=a;
    }


    public  void speak(){
        System.out.println(name+":"+age);
    }
public static void main(String[] args) {
         Eight1 o=new  Eight1("旺财",13);
        o.speak();
         Eight1 o1=new Eight1("小强");
        o1.speak();


        /*
         * 内存的运行原理
         * 
         * 1:首先在内存当中出现栈和堆,在栈中main函数进入,产生o对象,在堆中就会产生地址(假设地址为:0x0067),
         * 在堆中name,age就会进来,并且name,age会分别赋值为null,0;
         * 2:然后构造函数Eight1(String name,int a)就会进栈,并且在局部变量中进行赋值name="旺财",age=13;
         * 
         * 3.this(name); 这句代码的意思就是,当前对象进行初始化,把"旺财"通过this(当前对象)进行初始化,这样就把堆内存中的
         * name赋值为了"旺财",然后出栈
         * 
         * 4.this.age=a;通过this 来划分到底是个那个一个对象来进行初始化,this代表的就是当前对象,也就是地址(假设地址为:0x0067),
         * 这样就能成功的划分到底是给谁来划分
         * 
         * 5.运行完之后(初始化成功之后),就会把堆内存的地址(假设地址为:0x0067),给产生的o对象。
         * */
        }
}

this的小应用,比较是否是同龄人

class Person{

        private String name;
        private int  age;
        Nine1(){
            name="baby";
            age=1;
            System.out.println("Person run");
        }

        Nine1(String name){
            this.name=name;

        }
        Nine1(String name,int a){
            this(name);     
            this.age=a;
        }


        public  void speak(){
            System.out.println(name+":"+age);
        }
        /*
         * 判断是否是同龄人  
         * */
        public boolean compare(Nine1 p){//Nine1这相当是一个人类对象
            if(this.age==p.age){   //this代表调用这个方法的对象,代表传进来的对象
                return true;
            }else{
                return false;
            }
        }

        public static void main(String[] args) {
            Person  o=new  Person("aa",30);

            Person o1=new Person("zz",12);
            boolean b=o.compare(o1);
            System.out.println(b);//false
            }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值