复用代码是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 + "\n" + 31 "s2 = " + s2 + "\n" + 32 "s3 = " + s3 + "\n" + 33 "s4 = " + s4 + "\n" + 34 "i = " + i + "\n" + 35 "toy = " + toy + "\n" + 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