未经允许,禁止转载!!!!!!!!
this关键词在java里面很重要,想了解清楚this就必须对 类;对象;this;成员变量;方法;构造方法 都了解清楚。
一、使用this调用本类中的成员变量(属性)或成员方法
class Student { private String name; //定义一个成员变量name public void setName(String name) { //设置姓名,定义一个形参name name=name; //将局部变量的值传递给成员变量 } public String getName( ) { //获得姓名 return "姓名:"+name; } } public class ThisExample01{ public static void main(String args[]) { Student stu=new Student(); stu.setName("李明"); System.out.println(stu.getName()); } }
运行结果:姓名:null
由运行结果可以看出,通过name=name并没有正确的将内容赋给属性,为什么呢?因为此时操作的name实际上是方法中的,跟类中的属性完全不沾边。
另外,这个程序代码中,有一个成员变量name,同时在方法中有个形式参数,参数名也是name。然后在方法中将形式参数name的值传递给成员变量name。虽然我们可以看明白这个代码的含义,但是作
为Java编译器它是怎么判断使用哪个变量的呢?到底是将形式参数name的值传递给成员变量name,还是反过来讲成员变量name的值传递给形式参数name呢?
此时this这个关键字就起到作用了,这种情 况下使用this这个关键字代表的就是类中的成员变量,又叫做类的属性。所以此时,为了明确的表示出哪一个是类中的属性,就要加上“this.属性名称”的操作,
将student类的代码改进如下:this.成员变量 = 该方法传的参数
class Student { private String name; public void setName(String name) { this.name=name; } public String getName( ) { return "姓名:"+name; } }
既然this能够调用本类中的成员变量,那么,this也可以调用本类中的成员方法。以例2为例,程序代码如下:
class Student{ private String name; public void setName(String name){ this.print(); //调用本类中的print方法 //this.name = name; 由于此处把this.name = name注释了,所以向setName传递的名字参数没有被成员变量接收到,所以最后名字是null } public String getName( ) { return "姓名:"+name; } public void print( ) { System.out.println("设置相关信息如下……"); } } public class ThisExample02{ public static void main(String args[]) { Student stu=new Student(); stu.setName("李明"); System.out.println(stu.getName()); } }
最后输出结果是:
设置相关信息如下……
姓名:null
如果将this.name = name写进去的话,最后输出结果是:
设置相关信息如下……
姓名:李明
一般情况下,在Java语言中引用成员变量或者成员方法都是以对象名.成员变量或者对象名.成员方法的形式。
不过有些程序员即使在没有相同变量的时候,也喜欢使用this.成员变量的形式来引用变量 。这主要是从便于代码的阅读考虑。
一看到这个 this关键字就知道现在引用的变量是成员变量或者成员方法,而不是局部变量。这无形中就提高了代码的阅读性
二、使用this调用构造方法
在一个Java类中,构造方法是一个与类同名的方法,必须与类的名字相同。而且在Java类中必须存在一个构造方法。
如果在代码中没有显示的体现构造方法的话,那么编译器在编译的时候会自动添加 一个没有形式参数的构造方法。
在一个类中可以存在多个构造方法,这些构造方法都采用相同的名字,只是形式参数不同。Java语言就凭用户的参数来判断调用哪一个构造方法。
当一个类中有多个构 造方法时,可以利用this关键字相互调用。
Java编译器会根据所传递的参数数量的不同,来判断该调用哪个构造方法。
所以,我们在实际编程的时候有时候需要在一个构造方法中对另一个构造方法进行调用。但是,在使用this关键字调用其他构造方法的时候,this()调用构造方法只能放在构造方法的首行,
为的是能够为类中的属性初始化;而且至少有一个构造方法是不用this调用,否则程序会出现错误。
注意的是,使用this调用构造方法只适用于构造方法的调用,类中的其他方法不能使用这种方法。
三、使用this引用当前对象
this最重要的特定就是表示当前对象,那什么叫当前对象呢?在Java中当前对象就是指当前正在调用类中方法的对象。
使用this引用当前对象是指如果在类的方法中需要返回一个对象,并且该对象是 方法所在的类的当前对象,可以使用this关键字作为方法的返回值。
package practise; public class Student { public String getInfo(){ System.out.println("Student类-------->" + this); return null; } }
package practise; public class ThisExample06{ public static void main(String[] args){ Student stu1 = new Student(); Student stu2 = new Student(); System.out.println("MAIN方法---------->" + stu1); stu1.getInfo(); } }
输出结果是:
MAIN方法---------->practise.Student@15db9742
Student类---------->practise.Student@15db9742
下面再看一个例子
package practise; public class Students { private int age; private String name; public String getInfo(){ System.out.println("Students类-------->" + this); return null; } public Students(){ System.out.println("新对象实例化"); } public Students(String name,int age){ System.out.println("新对象实例化"); this.age = age; } }
package practise; public class ThisExample03 { public static void main(String[] args) { // TODO Auto-generated method stub Students stu1 = new Students("李明",20); System.out.println(stu1.getInfo()); } }
最后输出结果:
新对象实例化
Students类-------->practise.Students@15db9742
null
下面是this和super调用构造器的方法