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

更多精彩请关注

java面对对象入门(4)-程序块初始化的更多相关文章

  1. Java类对象数组声明和初始化

    Java是纯面向对象语言.类是其重要构成单位. 然后,在实际编程中,我们会自己定义一些类,如Point <span style="font-size:14px;">pu ...

  2. java 面对对象(抽象 继承 接口 多态)

    什么是继承? 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 多个类可以称为子类,单独这个类称为父类.超类或者基类. 子类可以直接 ...

  3. java面对对象 关键字this super

    this:this是指向对象本身的一个指针,成员函数内部指向当前类的对象 其实this主要要三种用法: 1.表示对当前对象的引用! 2.表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是 ...

  4. java学习笔记——java中对象的创建,初始化,引用的解析

    如果有一个A类. 1.例如以下表达式: A  a1 = new A(); 那么A是类,a1是引用.new A()是对象.仅仅是a1这个引用指向了new A()这个对象. 2.又如: A  a2; A代 ...

  5. java面对对象(六)--内部类、匿名内部类

    内部类 可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如: class Outer{ … class Inner{ …. } } class Outer1{} // 这个Inner1不是O ...

  6. JAVA面对对象(四)——抽象类

    抽象类的作用类似“模板”,可以根据它的格式来修改.创建新的类:但是不能直接由抽象类创建对象只能通过抽象类派生出新的类,再由它来创建对象:抽象类的使用同样是单继承,即一个子类只能继承一个抽象类 抽象类的 ...

  7. JAVA面对对象(三)——Super、static、final关键字

    Super 使用super关键字可以直接调用父类中的构造方法.属性.普通方法 super调用父类构造方法的操作,与this调用构造方法一样,语句必须放在子类构造方法的首行 public class P ...

  8. JAVA面对对象(二)——继承、方法的覆写

    1.继承就是基于已存在的类构造一个新类,继承已存在的类就能复用类的方法和属性,并且能够添加新的方法和属性.也就是子类和父类 2.一个父类可以拥有多个子类,一个子类只允许有一个父类 3.用extends ...

  9. JAVA面对对象(一)——封装

    1.封装思想:将对象的属性和行为封装起来的载体是类,类通常对客户隐藏其实现的细节 2.封装就是将属性私有化(private),并提供公共的方法(public)访问私有属性 3.通过封装,实现对属性数据 ...

随机推荐

  1. Nginx(二) 常用配置

    全局配置段 # 允许运行nginx服务器的用户和用户组 user www-data; # 并发连接数处理(进程数量),跟cpu核数保存一致: worker_processes auto; # 存放 n ...

  2. Jquery 替换全部字符

    item.replace('P','')   只会替换第一个'P'字符 item.replace(/P/gm,'') 替换全部'P'字符

  3. springboot-mybatis配置问题

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题

  4. 1757: 成绩稳定的学生(武汉科技大学结构体oj)

    #include<stdio.h>#include<string.h>struct student{ long no; char name[9]; int ch[20]; in ...

  5. 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL

    原文链接 疫情期间大家宅在家里是不是已经快憋出“病”了~~ ​ 公司给开了VPN,手机电脑都能连,手机装上APP测试包,就能干活了,所以walking从2020.02.01入京以来,已经窝在家里11天 ...

  6. C++读取MNIST数据集

    MNIST是一个标准的手写字符测试集. Mnist数据集对应四个文件: train-images-idx3-ubyte: training set images  train-labels-idx1- ...

  7. java架构之路-(netty专题)初步认识BIO、NIO、AIO

    本次我们主要来说一下我们的IO阻塞模型,只是不多,但是一定要理解,对于后面理解netty很重要的 IO模型精讲  IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式: ...

  8. ARTS Week 1

    Oct 28,2019 ~ Nov 3,2019 Algorithm 本周的学习的算法是二分法.二分法可以用作查找即二分查找,也可以用作求解一个非负数的平方根等.下面主要以二分查找为例. 为了后续描述 ...

  9. Go语言实现:【剑指offer】二叉树中和为某一值的路径

    该题目来源于牛客网<剑指offer>专题. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路 ...

  10. linux下命令的全称,方便记忆(转)-修改补充版

    su:Swith user  切换用户,切换到root用户 cat: Concatenate  串联(cat(Concatenate)命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容, ...