返回列表 发帖

[原创]Java中this与static的用法

[这个贴子最后由starlight在 2005/05/18 02:38pm 第 3 次编辑]

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

返回列表 回复 发帖