个性化阅读
专注于IT技术分析

Java实例初始化块

本文概述

实例初始化块用于初始化实例数据成员。它在每次创建类的对象时运行。

实例变量的初始化可以直接完成,但是在实例初始化块中初始化实例变量时可以执行额外的操作。

问)的使用实例初始化块当我们可以直接在实例数据成员赋值吗?例如:

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编译器的代码复制实例初始化块在每个构造函数。

规则实例初始化块

实例初始化块主要有三条规则。它们如下:

  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
赞(0)
未经允许不得转载:srcmini » Java实例初始化块

评论 抢沙发

评论前必须登录!