属个人收藏
参考文献链接:http://mougaidong-163-com.iteye.com/blog/994934
http://www.cnblogs.com/java-class/archive/2012/12/19/2825463.html
http://blog.csdn.net/anmei2010/article/details/4091227
http://www.cnblogs.com/-cyb/articles/Java-this.html
每当一个对象创建后,Java虚拟机会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this的用法。这在“Java关键字static、final使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
1、局部变量与成员变量重名,函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽(局部变量隐藏成员变量),此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。(注意区别成员变量和局部变量)
2、方法参数与成员变量重名
public class Hello {
String s = "Hello";
public Hello(String s) {
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;//把参数值赋给成员变量,成员变量的值改变
System.out.println("2 -> this.s = " + this.s);
}
public static void main(String[] args) {
Hello x = new Hello("HelloWorld!");
System.out.println("s=" + x.s);//验证成员变量值的改变
}
}
结果为:s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
s=HelloWorld!
3、调用该类的另一个构造方法,用法是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。如果在构造方法中调用另一个构造方法,则该语句必须是第一条语句。
public class ThisDemo {
String name;
int age;
public ThisDemo (){
this.age=21;
}
public ThisDemo(String name,int age){
this();
this.name="Mick";
}
private void print(){
System.out.println("最终名字="+this.name);
System.out.println("最终的年龄="+this.age);
}
public static void main(String[] args) {
ThisDemo tt=new ThisDemo("",0); //随便传进去的参数 tt.print();
}
}
(没有看懂案例)4、在函数中,需要引用该函数所属类的当前对象时候,直接用this。把this作为参数传递
,当你要把自己作为参数传递给别的对象时,也可以用this。
把自己当作参数传递时,也可以用this.(this作当前参数进行传递)
class A {
public A() {
new B(this).print();// 调用B的方法
}
public void print() {
System.out.println("HelloAA from A!");
}
}
class B {
A a;
public B(A a) {
this.a = a;
}
public void print() {
a.print();//调用A的方法
System.out.println("HelloAB from B!");
}
}
public class HelloA {
public static void main(String[] args) {
A aaa = new A();
aaa.print();
B bbb = new B(aaa);
bbb.print();
}
}
结果为:HelloAA from A!
HelloAB from B!
HelloAA from A!
HelloAA from A!
HelloAB from B!
在这个例子中,对象A的构造函数中,用new B(this)把对象A自己作为参数传递给了对象B的构造函数。
(暂时没有找相关资料)5、匿名类和内部类中的中的this
其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!