this关键字的三种常见用法

属个人收藏

 

参考文献链接: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。

扫描二维码关注公众号,回复: 678625 查看本文章

 

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是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!

 

猜你喜欢

转载自1290548112.iteye.com/blog/2281402