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

更多精彩请关注

posted @ 2020-02-23 21:37  程序员石磊  阅读(209)  评论(0编辑  收藏  举报