日期:2014-05-20  浏览次数:20774 次

谁能给我解释下程序中的this是干什么的?
class Person{
public String getInfo(){
System.out.println("Person类-->" + this);  
return null;
}
}
public class ThisDemo06{
public static void main(String[] args){
Person per1 = new Person();
Person per2 = new Person();
System.out.println("MAIN方法-->" + per1);
per1.getInfo();
System.out.println("--------------------");
System.out.println("MAIN方法-->" + per2);
per2.getInfo();
}
}


------解决方案--------------------
Java中this有三种情况:
1.指当前对象;
2.在一个构造器中调用另一个构造器,this(……)根据括号中的参数判断调用哪个构造器,这个必须放在构造器方法的第一行;
3.调用该对象成员变量。
你的代码中属于第一种,就是指当前的对象。
per1调用就是指per1对象,per2调用就是指per2对象!
此处会把改对象打印出来!
------解决方案--------------------
public class Person {
public String getInfo() {
return "Person类" + this;
}

public static void main(String[] args) {
Person per = new Person();
System.out.println(per.getInfo());
}
}

打印的结果是:Person类com.ok.thisok.Person@18a992f

this有三种用法: 
1.对当前对象的引用
2.表示用类的成员变量而非函数参数,注意在函数参数和成员变量同名时区分!其实这是第一一种用法的特例。
3.用于构造方法中用于引用满足指定参数类型的构造器,需要注意的是只能引用一个构造方法且必须位于首位。
public class ThisTest {
private int i = 0;

// 第一个构造器有一个int 型形参
ThisTest(int i) {
this.i = i + 1; // 此时this是引用了成员变量i而并非是函数的参数i
System.out
.println("Int construtor i-----this.i:" + i + "----" + this.i);
System.out.println("i-1:" + (i - 1) + "this.i+1" + (this.i + 1));
}

// 第二个构造器
ThisTest(String s) {
System.out.println("String constructor" + s);
}

// 第三个构造器
ThisTest(int i, String s) {
this(s);// this调用的二个构造器
this.i = i++;
System.out.println("Int construtctor" + i + "String constratctor" + s);
}
//普通的方法
public ThisTest increment() {
this.i++;
return this;
}

//买你方法
public static void main(String[] args) {
ThisTest tt0=new ThisTest(10);
ThisTest tt1=new ThisTest("Hello");
ThisTest tt2=new ThisTest(20,"Hello agin");
System.out.println(tt0.increment().increment().increment().i);
}

------解决方案--------------------
其实this在每一个地方都有不同的意义,具体分类。
1、“本身”(一般情况都是只本身的类,比如变量名重复了,可以使用这样来进行区分)
2、“调用此方法的调用类”(两个不同类进行跨越方法调用时,被调用的方法就会将this指向调用它的类)
3、“指向所继承父类”(在构造方法中发生,当有继承才会有此效果)