this 关键字

来源:互联网 发布:软件使用许可证模板 编辑:程序博客网 时间:2024/06/11 10:56

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