Java中的实例初始化器是什么?
在这篇文章中,我将说明什么是实例变量初始化器、实例初始化器、静态初始化器,以及实例初始化器在 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] 的匿名类没有构造函数。因此,实例初始化器需要在构造时执行任何类型的表达式。
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
leetcode之字母异位词分组