首页 > 代码库 > Chapter5_初始化与清理_this关键字

Chapter5_初始化与清理_this关键字

  this关键字是Java中一类很特殊的关键字,首先它只能在方法内使用,用来表示调用这个方法的对象,在这一点上this和其他对对象的引用的操作是相同的。我们之所以可以在方法内部访问到它是因为编译器在方法调用时,会将调用方法的对象作为第一个参数传到方法里面。下面列举几个例子来对this的用途做一些总结。

  (1)作为返回值,返回当前对象的引用,在一条语句里对同一个对象做多次操作。  

 1 class leaf{
 2     int count;
 3     
 4     public leaf(){
 5         count = 0;
 6     }
 7     
 8     public leaf increse(){
 9         count++;
10         return this;
11     }
12 }
13 
14 public class test {
15     public static void main(String[] args){
16         leaf l = new leaf();
17         l.increse().increse().increse();
18         System.out.println(l.count);
19     }
20 }

  (2)将自身传递给外部的方法,用于代码复用

 1 class sculpture{
 2     String done;
 3     
 4     public sculpture getSculped(){
 5         return sculptor.make(this);
 6     }
 7     
 8     public void info(){
 9         System.out.println(done);
10     }
11 }
12 
13 class sculptor{
14     public static sculpture make(sculpture s){
15         s.done = "yes";
16         return s;
17     }
18 }
19 
20 public class test {
21     public static void main(String[] args){
22         new sculpture().getSculped().info();
23     }
24 }

  这段代码实现的事情是,每一个sculpture(雕塑)都可以调用自己的getSculped方法,把自己传给sculptor(雕塑家)的一个静态方法,来完成雕塑。这样做的好处是每一个sculpture都可以调用外部方法,来完成雕塑的过程,实现对代码的复用。

  (3)在构造器中调用构造器

 1 class footballteam{
 2     int count;
 3     
 4     public footballteam(){
 5         this(23);
 6     }
 7     
 8     public footballteam(int count){
 9         this.count = count;
10     }
11     
12     public void info(){
13         //this(22);报错!
14         System.out.println("we have " + count + " players");
15     }
16 }
17 
18 public class test {
19     public static void main(String[] args){
20         footballteam rma = new footballteam();
21         rma.info();
22     }
23 }

  程序的第五行在默认构造器中调用了一次带参数的构造器,这样可以有不同的调用构造器的方法。另外13行的出错信息告诉我们,不能在除构造器之外的方法内调用构造器

Chapter5_初始化与清理_this关键字