this 关键字

java 中 this 关键字的用法,相信只要接触过Java的童鞋都应该用过,今天在这里就在温习一下。

java 中,this 可以完成3件事情:表示本类属性、表示本类方法和当前对象。下面通过例子来分别说明this在这几种情况下的应用。

1.this 表示本类属性:this.属性

先来看个例子:

class Person {
    private String name;
    private int age;
    public Person(String name, int age) {                   // 定义构造
        name = name;                                        // 为属性赋值
        age = age;                                          // 为属性赋值
    } // setter、getter略
    public String getInfo() {                               // 取得信息
        return "姓名:" + name + ",年龄:" + age;
    }
}

由上面可以看出构造函数在初始化的时候对name和age进行了赋值,但有些时候属性跟参数的名字相同时容易混淆,因此我们可以改写成如下的形式。

class Person {
    private String name;
    private int age;
    public Person(String name, int age) {                   // 定义构造
        this.name = name ;                                  // 为本类name属性赋值
        this.age = age ;                                    // 为本类age属性赋值
    } // setter、getter略
    public String getInfo() {                               // 取得信息
        return "姓名:" + name + ",年龄:" + age;
    }
}

这里通过this关键字调用了本类的属性name和age,是程序的结构更清晰。

2.this 调用本类方法
在一个类中主要有两种方法:普通方法和构造函数,因此调用方法也就分为两种形式。

  • 调用本类普通方法:调用本类方法可以使用“this.方法()”;
  • 调用本类构造函数:在一个构造中要调用其他构造使用“this()”调用。
    下面是一个存在三个构造方法例子(无参、有一个参数和有两个参数)
class Person {
    private String name;
    private int age;
    public Person() {                       // 无参构造方法
        System.out.println("*** 一个新的Person类对象被实例化。");   
    }
    public Person(String name) {            // 两参构造方法
        System.out.println("*** 一个新的Person类对象被实例化。");   
        this.name = name;
    }
    public Person(String name, int age) {   // 三参构造方法
        System.out.println("*** 一个新的Person类对象被实例化。");   
        this.name = name;
        this.age = age;
    } // setter、getter略
    public String getInfo() {               // 取得信息
        return "姓名:" + this.name + ",年龄:" + this.age;
    }
}

假设要输出的信息为100行,那么每一个构造函数都要重复这些代码,可是明明调用一个构造函数就可以搞定的,如果这样的话肯定就违背了软件开发的初衷,所以肯定有方法解决的,那就是调用本类构造

所以上面的代码可以修改为如下代码:

class Person {
    private String name;
    private int age;
    public Person() {                       // 无参构造方法
        System.out.println("*** 一个新的Person类对象被实例化。");   // 想象为50行代码
    }
    public Person(String name) {            // 两参构造方法
        this() ;                            // 调用无参构造
        this.name = name;
    }
    public Person(String name, int age) {   // 三参构造方法
        this(name) ;                        // 调用一个参数构造
        this.age = age;
    } // setter、getter略
    public String getInfo() {               // 取得信息
        return "姓名:" + this.name + ",年龄:" + this.age;
    }
}

这样一看代码复用,哈哈,是软件开发的思想,大牛们早就想到了。
注意:使用 this() 要注意以下问题
所有的构造方法是在对象实例化时被默认调用的,而且是在调用普通方法之前调用,所以使用“this()”调用构造方法的操作一定要放在构造方法的首行。

3. this 表示当前对象

这个不太好说,先贴个例子看看:

验证this为当前对象

class Demo {
    public void print() {
        System.out.println("当前对象:" + this);     // 直接输出this
    }
}
public class TestDemo {
    public static void main(String args[]) {
        Demo demo1 = new Demo();
        Demo demo2 = new Demo();
        System.out.println(demo1);                  // 直接输出对象
        demo1.print();                              // 调用方法,即:输出this
        System.out.println("******");
        System.out.println(demo2);                  // 直接输出对象
        demo2.print();                              // 调用方法,即:输出this
    }
}

运行结果:

exercise.Demo@133c5982
当前对象:exercise.Demo@133c5982
******
exercise.Demo@5f186fab
当前对象:exercise.Demo@5f186fab

通过运行结果发现,默认情况下一个对象直接输出所返回的是一个对象的编码,而使用demo1调用print() 方法时,直接输出的 this 和demo1的对象编码一样,demo2也同样如此。所以可以看出当前正在调用类中方法的对象为当前对象,而所有的当前对象都使用this来表示。

A little more for everyday。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值