this关键字的作用及其使用方法

下面这个代码中,有一个成员变量name。同时在方法中有个形式参数,名字也是name。然后再方法中将形式参数name的值传递给成员变量name。虽然我们可以看明白这个代码的含义,但是作为Java编译器它是怎么判断的呢?到底是将形式参数name的值传递给成员变量name,还是反过来讲成员变量name的值传递给形式参数name呢?也就是说,两个变量名字如果相同的话,那么Java如何判断使用哪个变量?此时this这个关键字就起到作用了。
This这个关键字其代表的就是对象中的成员变量或者方法。也就是说,如果在某个变量前面加上一个this关键字,其指的就是这个对象的成员变量或者方法,而不是指成员方法的形式参数或者局部变量。为此在上面这个代码中,this.name代表的就是对象中的成员变量,又叫做对象的属性。而后面的name则是方法的形式参数。代码this.name=name就是将形式参数的值传递给 成员变量。下面代码中我用的是数组name,无this说明时,使用同名形参name就会产生错误。

import java.util.Scanner;
class Student{
public String[] name = new String[5];
//下面这块代码写的时候无this.关键字,导致程序出错,在bccn论坛中求得出现该问题的原因
public void addName(String name){ //添加姓名
for(int i=0; i<this.name.length; i++){ //this.name代表当前对象(类)中的成员变量或方法
if(this.name[i] == null){ // 如此该循环语句中的this.全部去掉,会出现编译出错
this.name[i] = name; //无this关键字时,编译器会将形参name当作数组,导致出错
break;
}
/* 如果以上出现的类成员name为字符串而非字符串数组的话:
public void addName(String name){
name = name; //这就不会出现问题,编译器会将前一个name当作this.name来处理
*/
}
}
public void showName(){ //输出所有姓名
for(int i=0; i<name.length; i++)
System.out.print(name[i]+" ");
}
}

public class TestAdd{
public static void main(String[] args){
Student st = new Student();
Scanner input = new Scanner(System.in);
System.out.println("请输入五个学生姓名:");
for(int i=0; i<5; i++){
String newName = input.next();
st.addName(newName);
}
st.showName();
}
}
/*--------------------
请输入五个学生姓名:
11
33
44
88
99
11 33 44 88 99
--------------------*/

另注意:在下面这种情况下,不使用this.虽然不会出现问题,但最好加上this.关键字,以免产生混淆,同时也容易给阅读带来歧义。

Public Class Student{ 
String name; //定义一个成员变量name

public void SetName(String name){ //定义一个形参(局部变量)name

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

}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值