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行的出错信息告诉我们,不能在除构造器之外的方法内调用构造器。
时间: 2024-11-05 02:16:07