组合语法-域的初始化

  复用代码是Java的功能之一,复用代码一般有两种方式。一种是组合,即在新的类中产生现有类的对象。由于新的类由现有类的对象组成,所以这种方式称为组合。该方法只是复用了现有程序代码的功能,而非它的形式。

  域中得类为基本类型时能够自动初始化为零。对象引用会被初始化为null,而且如果试图为他们调用任何方法都会得到一个--运行时错误。很方便的是,再不抛出任何异常的情况下仍可以打印一个null引用。

  编译器并不简单的为为每一个引用创建默认对象,如果想初始化这些引用,可以在代码的下列位置进行初始化:

1.在定义的对象的地方。这意味着他们总能够在构造器被调用之前被初始化。

2.在类的构造器中。

3.就在正要使用这些对象之前,这种方式惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减轻额外负担。

4.使用实例初始化。

 1 // Constructor initialization with composition
 2 
 3 Calss Soap{
 4   private String s;
 5   Soap(){
 6      System.out.println("Soap()");
 7      s = "Constructed";  
 8   }    
 9   public String toString() {return s;}
10 }
11 
12 public class Bath{
13   private String // initializing at point of definition
14     s1 = "Happy",
15     s2 = "Happy",
16     s3,s4;
17     private Soap castille;
18     private int i;
19     private float toy;
20     Public Bath(){
21       System.out.println("Inside Bath()");
22       s3 = "3.14";
23       toy = 3.14f;
24       castille = new Soap();
25     }
26   public String toString(){
27      if(s4==null) // Delay initialization
28         s4 == "Joy";
29      return 
30         "s1 = " + s1 + "
" + 
31         "s2 = " + s2 + "
" + 
32         "s3 = " + s3 + "
" +
33         "s4 = " + s4 + "
" +
34         "i = " + i + "
" +
35         "toy = " + toy + "
" +
36         "castitle = " + "castitle";  
37   }
38   public static void main(String[] args){
39     Bath b = new Bath();
40     System.out.println(b);
41   }
42 }/* Output:
43 Inside path()
44 Soap()
45 s1 = Happy
46 s2 = Happy
47 s3 = Joy
48 s4 = Joy
49 i = 47
50 toy = 3.14
51 castille = Constructed
52 *///:~        

  注意,在Bath构造器中,有一行语句在所有初始化之前就已经执行了。如果没有在定义处初始化,那么除非发成了不可避免的运行期异常,否则不能保证信息在发送给对象引用前已经被初始化

在调用toString()之前,他将填充s4的值,以确保所有的域在使用之时已被妥善初始化。

原文地址:https://www.cnblogs.com/jhdcjh/p/10708392.html