Java实例初始化块

本文概述

  • 为什么使用实例初始化块?
  • 是什么调用首先,实例初始化块或构造函数?
  • 规则实例初始化块
  • 后程序的实例初始化块调用super ()
  • 另一个例子的实例
实例初始化块用于初始化实例数据成员。它在每次创建类的对象时运行。
实例变量的初始化可以直接完成,但是在实例初始化块中初始化实例变量时可以执行额外的操作。
问)的使用实例初始化块当我们可以直接在实例数据成员赋值吗?例如:
class Bike{ int speed=100; }

为什么使用实例初始化块?假设我必须执行一些操作,同时赋值给实例数据成员,如for循环来填充一个复杂的数组或错误处理等。
实例初始化块的例子
让我们看看执行初始化的实例初始化块的简单示例。
class Bike7{ int speed; Bike7(){System.out.println("speed is "+speed); } {speed=100; }public static void main(String args[]){ Bike7 b1=new Bike7(); Bike7 b2=new Bike7(); } }

Output:speed is 100 speed is 100

在java中有三个地方可以执行操作:
  • 方法
  • 构造函数
是什么调用首先,实例初始化块或构造函数?
class Bike8{ int speed; Bike8(){System.out.println("constructor is invoked"); } {System.out.println("instance initializer block invoked"); }public static void main(String args[]){ Bike8 b1=new Bike8(); Bike8 b2=new Bike8(); } }

Output:instance initializer block invoked constructor is invoked instance initializer block invoked constructor is invoked

在上面的示例中,似乎首先调用了实例初始化块,但是没有。实例初始化块在对象创建时调用。java编译器将实例初始化块复制到第一个语句super()之后的构造函数中。首先调用构造函数。让我们通过下图来理解它:
注意:java编译器的代码复制实例初始化块在每个构造函数。规则实例初始化块【Java实例初始化块】实例初始化块主要有三条规则。它们如下:
  1. 实例初始化块类的实例被创建时被创建。
  2. 实例初始化块后调用父类构造函数调用super()构造函数调用后(即)。
  3. 实例初始化块它们出现的顺序。
后程序的实例初始化块调用super ()
class A{ A(){ System.out.println("parent class constructor invoked"); } } class B2 extends A{ B2(){ super(); System.out.println("child class constructor invoked"); }{System.out.println("instance initializer block is invoked"); }public static void main(String args[]){ B2 b=new B2(); } }

Output:parent class constructor invoked instance initializer block is invoked child class constructor invoked

另一个例子的实例
class A{ A(){ System.out.println("parent class constructor invoked"); } }class B3 extends A{ B3(){ super(); System.out.println("child class constructor invoked"); }B3(int a){ super(); System.out.println("child class constructor invoked "+a); }{System.out.println("instance initializer block is invoked"); }public static void main(String args[]){ B3 b1=new B3(); B3 b2=new B3(10); } }

Output:parent class constructor invoked instance initializer block is invoked child class constructor invoked parent class constructor invoked instance initializer block is invoked child class constructor invoked 10

    推荐阅读