Java 中的this深解

来源:互联网 发布:男生喜欢内衣颜色知乎 编辑:程序博客网 时间:2024/06/15 10:40

This理解深刻方能调用自如)

关于this这个关键字以前一直停留在一个类里方法的形参和类成员参数一样时的用法,如:

Class Person{

Private String say;

Public Void isSay(String say){

This.say = say;

}

}

仅仅是这种用法是没有完全参透this的。当然,我也不能说是完全参透啦。。。。

一、

1、当出现下面的情况时:

Class A{

Public static void main(String[] args){

Person p1 = new Person(),p2 = new Person();

P1.isSay(“hai”);

P2.isSay(“haha”);

}

}

   在这种情况如何知道isSay是被哪个引用调用的呢?面向对象的语法来编写代码(即“发送消息给对象”),编译器暗自把“所操作对象的引用”作为第一个参数传递给方法isSay了。也就是说在调用方法时编译器偷偷在实参里放了一个this,即自身类的引用。相当于:

P1.isSay(P1,”hai”);

P2.isSay(P2,”haha”);//当然这种写法是不对的,只是方便理解而已

2、在方法里调用自身类的其他方法时是不需要加this的,当前方法中的this会自动应用于同一类中的其他方法,编译器会自动帮你添加this的。只有当需要指出当前对象的引用时,才需要使用this关键字。例如,当需要返回对当前对象的引用时,常常这样:

Public class leaf{

Leaf  increment(){

Return this;

}

}

二、

在构造器中调用构造器。

1、通常写this的时候,都是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。

2、可以用this调用一个构造器,但却不能调用两个(构造器)。可以在构造器里用this调用其他成员参数。

3、在构造器调用构造器必须把调用语句放在方法的第一行!

4、在除构造器的其他方法中不能用this调用构造器!

三、

static的关系

1、static方法里没有this

2、Static方法里不能调用非静态方法(即非static)(其实也不是绝对不可能。Thinking in Java中提到:“如果你传递一个对象引用到static方法里[静态方法可以创建其自身的对象],然后通过这个引用[this效果一样],你就可以调用非静态方法和访问非静态数据成员了,但通常这样时,可以只用非静态方法就可以实现了”,其实这种方式我也没试过),反过来却可以。

3、要是代码中出现大量的static方法时,就该考虑自己的设计了。(static方法很受非议,因为很多人都视此为全局变量!)

以上总结与看完thinking in Java

 

0 0