大数据必学Java基础(三十五):深入了解关键词this

举报
Lansonli 发表于 2022/08/01 00:25:08 2022/08/01
【摘要】 深入了解关键词this一、创建对象的过程(1)在第一次遇到一个类的时候,对这个类要进行加载,只加载一次。(2)创建对象,在堆中开辟空间(3)对对象进行初始化操作,属性赋值都是默认的初始值。(4)new关键字调用构造器,执行构造方法,在构造器中对属性重新进行赋值从上面的效果能够看到:this指代的就是当前对象:内存:二、this关键字用法1、this可以修饰属性 总结:当属性名字和形参发生重名...

深入了解关键词this

一、创建对象的过程

(1)在第一次遇到一个类的时候,对这个类要进行加载,只加载一次。

(2)创建对象,在堆中开辟空间

(3)对对象进行初始化操作,属性赋值都是默认的初始值。

(4)new关键字调用构造器,执行构造方法,在构造器中对属性重新进行赋值

从上面的效果能够看到:this指代的就是当前对象:

内存:

二、this关键字用法

1、this可以修饰属性

总结:当属性名字和形参发生重名的时候,或者 属性名字 和局部变量重名的时候,都会发生就近原则,所以如果我要是直接使用变量名字的话就指的是离的近的那个形参或者局部变量,这时候如果我想要表示属性的话,在前面要加上:this.修饰

如果不发生重名问题的话,实际上你要是访问属性也可以省略this

package com.lanson;

/**
 * @Auther: lanson
 */
public class Person {
    //属性
    int age;
    String name;
    double height;
    //空构造器
    public Person(){

    }
    //有参构造器
    public Person(int age,String name,double height){
        this.age = age;
        this.name = name;
        this.height = height;
    }
    //方法:
    public void eat(){
        int age = 10;
        System.out.println(age);//就近原则,age指的是离它近的age--》局部变量的age
        System.out.println(this.age);//这里指代的就是属性的age
        System.out.println("我喜欢吃饭");
    }
}


2、 this修饰方法

总结:在同一个类中,方法可以互相调用,this.可以省略不写

package com.lanson;

/**
 * @Auther: lanson
 */
public class Person {
    //属性
    int age;
    String name;
    double height;
    //空构造器
    public Person(){

    }
    //有参构造器
    public Person(int age,String name,double height){
        this.age = age;
        this.name = name;
        this.height = height;
    }
    //方法:
    /*public void eat(){
        int age = 10;
        System.out.println(age);//就近原则,age指的是离它近的age--》局部变量的age
        System.out.println(this.age);//这里指代的就是属性的age
        System.out.println("我喜欢吃饭");
    }*/

    public void play(){
        /*this.*/eat();
        System.out.println("上网");
        System.out.println("洗澡");
    }

    public void eat(){
        System.out.println(/*this.*/age);
        System.out.println("吃饭");
    }
}


3、this可以修饰构造器

总结:同一个类中的构造器可以相互用this调用,注意:this修饰构造器必须放在第一行

package com.lanson;

/**
 * @Auther: lanson
 */
public class Person {
    //属性
    int age;
    String name;
    double height;
    //空构造器
    public Person(){

    }
    //有参构造器
    public Person(int age,String name,double height){
        this(age,name);
        this.height = height;

    }
    public Person(int age,String name){
        this(age);
        this.name = name;
    }
    public Person(int age){
        this.age = age;
    }
    //方法:
    /*public void eat(){
        int age = 10;
        System.out.println(age);//就近原则,age指的是离它近的age--》局部变量的age
        System.out.println(this.age);//这里指代的就是属性的age
        System.out.println("我喜欢吃饭");
    }*/

    public void play(){
        /*this.*/eat();
        System.out.println("上网");
        System.out.println("洗澡");
    }

    public void eat(){
        System.out.println(/*this.*/age);
        System.out.println("吃饭");
    }
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。