网站开发框架具体使用方法,工资卡app下载,视频播放类网站建设费用,聊城做网站公司信息参考链接#xff1a; Java中的实例初始化块(IIB)
在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB )。不过我觉得介绍的有点简单了#xff0c;于是#xff0c;再写一篇文章详细介绍下吧。
Java 语言中#xff0c;存在三种操作#x…参考链接 Java中的实例初始化块(IIB)
在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB )。不过我觉得介绍的有点简单了于是再写一篇文章详细介绍下吧。
Java 语言中存在三种操作方法 、构造函数 和 初始化块。
其中初始化块又分为 实例初始化块 ( IIB ) 和 静态初始化块。本章节我们主要介绍实例初始化块。
实例初始化块 用于初始化实例变量。
实例初始化块 会在初始化类的一个实例时执行而且在构造函数之前就执行。并且每次创建类的对象时它们都会执行。
实例化块的语法
实例初始化块一般放在构造函数之前使用大括号 {} 扩起来的代码。语法结构一般如下
class JavaTester
{ // 实例化块 { System.out.println(IIB block); } // 构造函数 JavaTester() { System.out.println(Constructor Called); } public static void main(String[] args) { JavaTester a new JavaTester(); }
} 注意实例化块并不是类的必须。只是一个可选项。用于抽出构造函数的公共部分单独执行而已。 这段代码是可以编译运行的运行结果如下
[yufeiwww.twle.cn java]$ javac JavaTester.java java JavaTester
IIB block
Constructor Called 一个类中包含多个实例初始化块
类中的 实例初始化块 并不是类所必须的而且不限数量。一个类既可以没有实例初始化块也可以有多个实例初始化块。
如果一个类有多个实例初始化块那么它们会按照顺序从上到下依次执行也就是说定义在类顶部的实例初始化块最先执行。
我们来看一段代码下面的类 JavaTester 定义了多个实例初始化块。
class JavaTester
{ { System.out.println(IIB1 block 1 ); } { System.out.println(IIB2 block 2); } JavaTester() { System.out.println(Constructor Called); } { System.out.println(IIB3 block 3); } public static void main(String[] args) { JavaTester a new JavaTester(); }
} 运行上面这段代码输出结果如下
[yufeiwww.twle.cn java]$ javac JavaTester.java java JavaTester
IIB1 block 1
IIB2 block 2
IIB3 block 3
Constructor Called 父类中的初始化块
在 Java 语言的继承体系中父类同样可以有初始化块而且数量不限。
父类的实例初始化块在子类的构造函数中调用 super() 之后立即运行。编译器会在执行当前类的实例初始化块之前先执行父类的实例初始化块。
是不是很绕口我们写一段代码来演示下
class B
{ B() { System.out.println(B-Constructor Called); } { System.out.println(B-IIB block); } } public class JavaTester extends B
{ { System.out.println(JavaTester IIB1 block 1 ); } { System.out.println(JavaTester IIB2 block 2); } JavaTester() { super(); System.out.println(JavaTester-Constructor Called); } { System.out.println(JavaTester IIB3 block 3); } public static void main(String[] args) { JavaTester a new JavaTester(); }
} 运行以上范例输出结果如下
[yufeiwww.twle.cn java]$ javac JavaTester.java java JavaTester
B-IIB block
B-Constructor Called
JavaTester IIB1 block 1
JavaTester IIB2 block 2
JavaTester IIB3 block 3
JavaTester-Constructor Called 从运行的结果来看当创建类 JavaTester 的对象时编译器尝试执行类 JavaTester 的构造函数。但因为它有一个父类在发现了 super() 语句后就转而先执行父类的构造函数。
因此在继承体系中实例初始化块和构造函数的执行顺序如下
执行父类的实例初始化块执行父类的构造函数执行当前类的实例初始化块执行当前类的构造函数
实例初始化块的要点
我们一起来回顾下实例初始化块的要点。
每次创建新实例时都会运行实例初始化块初始化块按它们在类中出现的顺序运行如果存在父类则首先会实例化父类然后在调用当前类的实例初始化块最后再调用当前类的构造函数。 声明本文首发 简单教程网址为 https://www.twle.cn/t/454#reply0