this的用法

本文详细介绍了JavaSE中this关键字的三个主要应用场景:解决成员变量与局部变量同名问题;在一个构造方法中调用另一个构造方法;以及在实例方法中返回当前对象的引用。

今天复习了下JavaSE方面的知识,看到了this关键字,说实话,以前对this关键字知道一些应用的场合,可是一直没有把它梳理下,今天既然有这个想法,当然要把他搞透了。


this关键字主要有以下几个应用:

1.在一个类中类的成员变量和方法的局部变量同名。使用this.XX来访访问成员变量。

2.this调用这个类中的另外一个构造方法。

3.在一个实例方法内访问当前实例的应用。



应用一:

public class Student{
  String name; 

  private void SetName(String name){ 

  this.name=name; //将局部变量的值传递给成员变量

  }

}

 


     一般情况下,在Java语言中引用成员变量或者成员方法都是以对象名.成员变量或者对象名.成员方法的形式。不过有些程序员即使在没有相同变量的时候,也喜欢使用this.成员变量的形式来引用变量。这主要是从便于代码的阅读考虑的。一看到这个this关键字就知道现在引用的变量是成员变量或者成员方法,而不是局部变量。这无形中就提高了代码的阅读性。不过话说回来,这是this关键字在Java语言中的最简单的应用。从这个应用中,我们可以看出this关键字其代表的就是对象的名字。掌握这个基本的原理之后,再了解后续的一些高级应用,也就是水到渠成的事情了。


应用二:

public class Student{ 
  public Student(){ 
  this("xiaoxiao")
  }

  public Student(String name){ 
          System.out.println(name);
  }
}

 

上面两个构造方法一个带形参一个不带,形参了方法的重载,需要注意的是在一个类中,不能每个构造方法都有this()。


应用三:

return this.

 this关键字除了可以引用变量或者成员方法之外,还有一个重大的作用就是返回类的饮用。如在代码中,可以使用return this,来返回某个类的引用。此时这个this关键字就代表类的名称。如这个代码在上面这个student类中,那么这个代码其代表的含义就是return student。可见,这个this关键字除了可以引用变量或者成员方法之外,还可以做为类的返回值。这才是this关键字最引人注意的地方。

this”在不同的编程语言中有不同的用法,以下是一些常见编程语言中“this”的用法: ### Java 中“this”的用法 - **引用当前对象**:“this”的类型就是所在类的名字,“this”相当于当前对象。例如在一个`Person`类中,有一个`set`方法,代码如下: ```java public class Person { String name; int age; public void set(String name1, int age1) { this.name = name1; this.age = age1; } } ``` 这里的`this`就代表当前调用`set`方法的`Person`对象 [^1]。 - **返回类的引用**:“this”关键字除了可以引用变量或者成员方法之外,还可以返回类的引用。可以使用`return this`来返回某个类的引用,此时“this”关键字就代表类的名称。例如在一个`Student`类中: ```java public class Student { public Student getStudent() { return this; } } ``` 这里的`return this`代表返回`Student`类的引用 [^3]。 - **在构造方法中调用其他构造方法**:在一个构造方法中,用“this(参数)”的形式调用构造方法,“this(参数)”必须写在主调方法的第一行,且不能出现相互循环调用。例如: ```java public class Person { String name; int age; double height; public Person(String name, int age, double height) { this(name, age); this.height = height; } public Person(String name, int age) { this.name = name; this.age = age; } } ``` 在上述代码中,第一个构造方法通过`this(name, age)`调用了第二个构造方法 [^5]。 ### JavaScript 中“this”的用法 - **全局作用域中**:在全局作用域中,“this”代表全局对象。例如: ```javascript var x = 1; function test() { console.log(this.x); } test(); // 1 ``` 这里的`this`代表全局对象,所以`this.x`就是全局变量`x`,输出结果为 1 [^2]。 - **作为对象方法的调用**:当“this”在对象的方法中使用时,“this”代表调用该方法的对象。例如: ```javascript var obj = { x: 2, test: function() { console.log(this.x); } }; obj.test(); // 2 ``` 在上述代码中,`test`方法中的`this`代表`obj`对象,所以`this.x`就是`obj.x`,输出结果为 2。 ### C++ 中“this”指针的用法 - **指向正在被操作的对象**:“this”指针是一个隐含于每一个成员函数中的特殊指针,它指向正在被该成员函数操作的那个对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋给“this”指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用“this”指针。例如: ```cpp #include <iostream> class X { public: int data; void setData(int value) { this->data = value; } }; int main() { X obj; obj.setData(10); std::cout << obj.data << std::endl; return 0; } ``` 在上述代码中,`setData`方法中的`this`指针指向`obj`对象,通过`this->data`来访问`obj`对象的数据成员`data` [^4]。 - **实现对象的链式引用**:在某些场景下,为实现对象的链式引用,需要显式引用“this”指针。例如: ```cpp #include <iostream> class X { public: int data; X& setData(int value) { this->data = value; return *this; } X& printData() { std::cout << this->data << std::endl; return *this; } }; int main() { X obj; obj.setData(10).printData(); return 0; } ``` 在上述代码中,`setData`和`printData`方法都返回`*this`,这样就可以实现对象的链式引用 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值