zoukankan      html  css  js  c++  java
  • java面对对象入门(4)-程序块初始化

    Java实例初始化程序是在执行构造函数代码之前执行的代码块。每当我们创建一个新对象时,这些初始化程序就会运行。

    1.实例初始化语法

    花括号创建实例初始化程序块。对象初始化语句写在括号内。

    public class DemoClass {
         
        //This is initializer block 1
        {
          //statements
        }
     
        //This is initializer block 2
        {
          //statements
        }
    }
    

    2.Java实例初始化器功能

    实例初始化器具有以下功能。

    • 我们可以在一个类中定义多个初始化器
    • 所有初始化程序将按顺序执行,以使其出现在类主体中。
    • 初始化程序在调用父类构造函数之后,在执行子类构造函数之前运行。请注意super(),如果我们未在子类的构造函数中显式提供第一个语句,则Java会插入父类的默认构造函数。
    • 执行完所有初始化程序后,将执行构造函数的语句。
    • 我们可以在初始化器中使用此类和父类的构造函数的调用。

    3.Java实例初始化序列流程

    基于以上给出的功能,让我们概述一下对象的实例初始化如何进行。

    1. 子类构造函数被调用。
    2. 子类构造函数的第一个语句为super()(或提供的显式构造函数),因此将调用父类构造函数。
    3. 父类的初始化程序按其出现顺序执行。
    4. 父类构造函数语句被执行。
    5. 子类的初始化程序按其出现顺序执行。
    6. 子类构造函数语句被执行。

    4.Java实例初始化示例

    让我们快速地看一个演示以上理论的例子。
    ParentClass.java

    public class ParentClass 
    { 
      public ParentClass() 
      {
        System.out.println("In ParentClass Constructor");
      }
       
      //Instance Initializer
      {
        System.out.println("In ParentClass Instance Initializer");
      }
    }
    

    ChildClass.java

    public class ChildClass extends ParentClass 
    {
      public ChildClass() 
      {
        super();  //If not provided, JVM will insert it
        System.out.println("In ChildClass Constructor");
      }
       
      //Instance Initializer 1
      { 
        System.out.println("In ChildClass Instance Initializer 1");
      }
       
      //Instance Initializer 2
      {
        System.out.println("In ChildClass Instance Initializer 2");
      }
    }
    

    Main.java

    public class Main 
    {
      public static void main(String[] args) 
      {
        ChildClass childObj = new ChildClass();
      }
    }
    

    程序输出

    In ParentClass Instance Initializer
    In ParentClass Constructor
    In ChildClass Instance Initializer 1
    In ChildClass Instance Initializer 2
    In ChildClass Constructor
    
    

    更多精彩请关注

  • 相关阅读:
    (二)juc线程高级特性——CountDownLatch / Callable / Lock
    (一)juc线程高级特性——volatile / CAS算法 / ConcurrentHashMap
    配置tomcat的session共享
    elastic不错的官方文档(中文)
    elasticsearch java客户端api使用(一)
    Tomcat 没有自动解压webapp下的war项目文件问题
    Spring+Quartz实现定时任务
    注意的问题
    JMS之——ActiveMQ 高可用与负载均衡集群安装、配置(ZooKeeper + LevelDB + Static discovery)
    activemq持久化配置,设置为主从模式(带复制的主从模式,应用mysql数据库)
  • 原文地址:https://www.cnblogs.com/qingmiaokeji/p/12354472.html
Copyright © 2011-2022 走看看