• 组合语法-域的初始化


      复用代码是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的值,以确保所有的域在使用之时已被妥善初始化。

  • 相关阅读:
    #特征方程,dp,快速幂#洛谷 4451 [国家集训队]整数的lqp拆分
    #状压dp,贪心#CF1316E Team Building
    #线段树,欧拉函数#CF1114F Please, another Queries on Array?
    #启发式合并,链表#洛谷 3201 [HNOI2009] 梦幻布丁
    #树状数组#洛谷 4113 [HEOI2012]采花
    #链表#洛谷 3794 签到题IV
    #矩阵乘法,斐波那契#洛谷 2544 [AHOI2004] 数字迷阵
    #dp#洛谷 4399 [JSOI2008]Blue Mary的职员分配
    #同余最短路#洛谷 3403 跳楼机
    #网络流,分层图#洛谷 4400 [JSOI2008] Blue Mary的旅行
  • 原文地址:https://www.cnblogs.com/jhdcjh/p/10708392.html
Copyright © 2020-2023  润新知