了解更多java知识点击文本进行观看学习https://www.bilibili.com/video/BV1vb4y1p7N4/
在这篇文章中,我将说明什么是实例变量初始化器、实例初始化器、静态初始化器,以及实例初始化器在 Java 中的工作原理。
1. 执行顺序
看看下面这个类,你知道哪个是最先执行的吗?
公共 类Foo {
//实例变量初始化
String s = "abc" ;
//构造函数
public Foo ( ) {
System . 出来。println ( "构造函数调用" ) ;
}
//静态初始化器
static {
System . 出来。println ( "调用静态初始化器" ) ;
}
//实例初始化
{
System . 出来。println ( "调用实例初始化器" ) ;
}
公共 静态 无效主要(字符串[ ] args ) {
新Foo ();
新富( ) ;
}
}
输出:
称为静态初始化程序
实例初始化程序调用
构造函数调用
实例初始化程序调用
构造函数调用
2. Java 实例初始化器是如何工作的?
上面的实例初始化程序包含一个 println 语句。要了解它是如何工作的,我们可以将其视为变量赋值语句,例如b = 0
. 这可以使它更容易理解。
代替
整数b = 0
,我们可以写成
诠释b ;
b = 0 ;
因此,实例初始化器和实例变量初始化器几乎相同。
3. 实例初始化器什么时候有用?
实例初始化器的使用很少见,但在以下情况下,它仍然可以作为实例变量初始化器的有用替代方案:
(1) 初始化代码必须处理异常
(2) 执行无法用实例变量初始化程序表达的计算。
当然,这样的代码可以写在构造函数中。但是如果一个类有多个构造函数,你将不得不在每个构造函数中重复代码。
使用实例初始化器,您只需编写一次代码,无论使用什么构造函数创建对象,它都会执行。(我猜这只是一个概念,并不经常使用。)
实例初始化器有用的另一种情况是匿名内部类,它根本不能声明任何构造函数。(这会是放置日志功能的好地方吗?)
感谢 Heinrich Hartmann 的评论:
另请注意,实现接口 [1] 的匿名类没有构造函数。因此,实例初始化器需要在构造时执行任何类型的表达式。
最后想了解更多java知识关注微信公众号【HOME十二】获取更多资料
了解更多java知识点击文本进行观看学习https://www.bilibili.com/video/BV1vb4y1p7N4/