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行的出错信息告诉我们,不能在除构造器之外的方法内调用构造器。

时间: 2024-11-05 02:16:07

Chapter5_初始化与清理_this关键字的相关文章

Chapter5_初始化与清理_用构造器初始化

接下来进入第五章,java中初始化和清理的问题,这是两个涉及安全的重要命题.初始化的功能主要是为库中的构件(或者说类中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止资源过分被垃圾占用的出现,为解决这些问题,java中提供了对构造器和垃圾清理器的支持,首先讨论构造器的问题. 为了保证程序的安全性,java中采用了构造器的机制来保证初始化.第一个问题就是命名的问题,java中的构造器规定名称必须和类名相同.这主要是出于如下的考虑,第一如果让编程者自行命名,则可能会产生于其他任何

Chapter5_初始化与清理_数组初始化与可变参数列表

一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥有这个数组的存储空间.要获取数组的存储空间,必须要写初始化表达式,最朴素的表达式类型如下 1 int[] a = {1,2,3}; 如果在编写程序时,不能确定数组的长度,可以使用如下方式,直接用new在数组里创建元素 1 int[] a = new int[3]; 当创建对象数组时,数组中的元素仅仅

Chapter5_初始化与清理_构造器初始化

一.构造器初始化的基本顺序 在使用构造器进行初始化时,最需要注意的是初始化的顺序,这种方法可以给初始化的顺序带来很大的灵活性.看如下的一个例子. 1 class Window{ 2 Window(int marker){ 3 System.out.println("Window(" + marker + ")"); 4 } 5 } 6 7 class House{ 8 Window w1 = new Window(1); 9 House(){ 10 System.o

Chapter5_初始化与清理_成员初始化

在java中,成员初始化在使用之前应该都要保证已经完成初始化.对于在方法体中的局部变量,如果没有使用指定初始化的方法对成员变量进行初始化,编译器会提示一个错误.而对于类的数据成员,编译器会对这些成员赋予默认的初始值,下面这段代码反映了这一点. 1 package test1; 2 3 class InitialValue{ 4 public int i; 5 public boolean b; 6 public char c; 7 public float f; 8 public String

Chapter5_初始化与清理_方法重载

方法重载是java中编译器在方法调用时采用的一个重要机制.起初方法重载的初衷是方便构造器的调用,比如对于一个类,可以实现用不同的方法来初始化它,又由于构造器的名称都是一样的,所以必须使用到方法重载的机制,并且这种机制不仅限于构造器方法.下面这个例子提供了方法重载的构造器和一般方法的例子. 1 class tree{ 2 int height; 3 tree(){ 4 System.out.println("无参数构造器"); 5 } 6 7 tree(int height){ 8 th

对象的初始化与清理

随着计算机革命的发展,"不安全"的编程方式已经逐渐成为了编程代价高昂的主因之一. 正确的初始化和清理过程对于程序的安全性和性能至关重要,不同的编程语言对此具有不同的处理机制.C++中利用构造器完成初始化,当对象不再被使用时调用析构函数完成销毁,程序员需要手动完成内存释放管理过程:Java也采用了构造器完成初始化,同时提供了垃圾会收器对不再使用的内存资源进行自动管理,减轻了程序员管理手动管理内存的编程负担. 1 重载 Java(和C++)中,构造器是强制重载方法名的原因之一.因为构造器常

图解 & 深入浅出Java初始化与清理:构造器必知必会

Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter    :BYSocket 在面向对象编程中,编程人员应该在意"资源".比如 ? 1 <font color="#000000">String hello = "hello": </font> 在代码中,我们很在意在内存中Stri

Thinking In Java笔记(第五章 初始化与清理(三))

第五章 初始化与清理 5.6 成员初始化 Java尽力保证:所有变量在使用前都能得到恰当的初始化.对于方法的局部变量,Java以编译错误的形式来保证.如下: void f() { int i; i++; //Error:i not initialized } 会得到一条错误的消息,提示i可能没有初始化.编译器可以给i赋初值,但是并没有这么做,因为没有初始化是程序员的疏忽,为了保证程序的稳定性,能帮助程序员找出程序的缺陷所在. 但如果是类的数据成员是基本类型,类的每个基本类型成员变量都会保证有一个

Java编程思想:第5章 初始化与清理

随着计算机革命的发展,“不安全”的编程方式已经逐渐成为编程代价高昂的主因之一. 初始化和清理,正是涉及安全的俩个问题. 5.1 用构造器确保初始化 构造器名与类名相同,没有返回值 5.2 方法重载 构造器的重载与方法重载 5.2.1 区分重载的方法 参数列表的不同(不同顺序也是重载,但不建议这么做) 5.2.2 涉及基本类型的重载 void print(char c){System.out.println("The character is "+c); }    void print(