[这个贴子最后由starlight在 2005/05/18 02:38pm 第 3 次编辑]
[watermark]
本文是学习Thinking in Java的一些心得和笔记整理如下:
[color=#DC143C]关键字this
使用2个同型对象a、b,如何区分这两个对象同时调用函数f()呢?
例如:- class Banana {
- void f(int i) {/*...*/}
- Banana a = new Banana(),b = new Banana();
- a.f(1);
- b.f(2);
- }
复制代码 其实是编译器自动作了一些事。有个隐晦的第一参数被传入f(),这个参数是“正在操作中的对象的引用”。所以上述代码中函数的调用形式如下:
- Banana.f(a,1);
- Banana.f(b,2);
-
复制代码 此种转换只存在于语言内部,无法在编辑器上书写那样的代码使得通过编译。
这个this关键字仅用于函数之内,能取得“唤起此一函数”的那个对象引用。可以对任何对象引用一样的处理方式来处理this。然而只是在某个类的某个函数内调用同一个类的另一个函数时,没有必要使用this。
何时需要使用this:当你必须指定当前的对象引用究竟为何时,才需要使用关键字this。
例如:- public class Leaf {
- int i = 0;
- Leaf increment()
- {
- i++;
- return this;
- }
- void print()
- {
- System.out.println("i = "+i);
- }
- public static void main(String[] args)
- {
- Leaf x = new Leaf();
- x.increment().increment().increment().print();
- }
- }
复制代码 由于increment()通过关键字this返回了当前的对象,所以可以在同一对象身上执行多次操作。
|