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

规则实例初始化块

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

实例初始化块类的实例被创建时被创建。

实例初始化块后调用父类构造函数调用super()构造函数调用后(即)。

实例初始化块它们出现的顺序。

后程序的实例初始化块调用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值