您的位置:首页 > 其它

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

2014-04-14 11:01 225 查看
下面这个代码中,有一个成员变量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.关键字,以免产生混淆,同时也容易给阅读带来歧义。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: