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.关键字,以免产生混淆,同时也容易给阅读带来歧义。
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.关键字,以免产生混淆,同时也容易给阅读带来歧义。
相关文章推荐
- java中equals和==之间的区别?clone方法的作用,及其为什么要使用clone方法?如何使用clone复制对象?以及深克隆浅克隆
- 使用CSS修正一切:20多个常见Bug及其修正方法
- 拦截器使用及其作用
- Format类及其子类功能和使用方法具体解释
- C++知识点-虚函数的作用和使用方法
- PreTranslateMessage作用和使用方法
- Ruby各种枚举方法及其使用【001】
- 详细介绍 Hibernate 泛型 DAO 及其使用方法
- #ifdef-#endif的作用及其使用技巧
- activiti:initiator的作用及其使用
- [ggk itcast周六java]java多线程二种方法,及其安全。内部类及匿名类的使用方法。
- C++ "#"的作用和使用方法
- Java 注解的几大作用及使用方法详解(完)
- 联合体(union)的使用方法及其本质
- C++中Static作用和使用方法
- 使用Apache Axis部署 Web服务时的常见问题及其解决方法(IBM 官方文档)
- Android-->EventBus 3.0新版使用说明(及其使用方法)
- 搜索文件指令及其使用方法
- js中this的作用和使用方法
- C++中Static作用和使用方法