栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我的实例初始化程序块在声明它之前可以引用一个字段?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我的实例初始化程序块在声明它之前可以引用一个字段?

从文档:

Java编译器将初始化程序块复制到每个构造函数中。因此,该方法可用于在多个构造函数之间共享代码块。

上面的陈述有些误导,因为如果按照上面文档的解释,我们可以像这样重写原始代码:

public class WrongVersionOfWhyIsThisOk {    int a = 10;    public WhyIsThisOk (){        a = 5;    }    public static void main(String[] args){        WrongVersionOfWhyIsThisOk why = new WrongVersionOfWhyIsThisOk ();        System.out.println(why.a);    }}

但是运行

WrongVersionOfWhyIsThisOk
将产生5而不是原始代码产生的10。

但是实际上,初始化程序块和变量赋值都被复制到构造函数中:

public class RightVersionOfWhyIsThisOk {    int a;    public RightVersionOfWhyIsThisOk (){        a = 5;        a = 10;    }    public static void main(String[] args){        RightVersionOfWhyIsThisOk why = new RightVersionOfWhyIsThisOk ();        System.out.println(why.a);    }}

更新:

这是文档,详细描述了初始化顺序和构造函数调用:

4)执行该类的实例初始化器和实例变量初始化器,并按照从左到右的顺序将实例变量初始化器的值在文本中显示在该类的源代码中,并将它们分配给相应的实例变量。如果执行这些初始化程序中的任何一个导致异常,则不会再处理其他初始化程序,并且该过程会因相同的异常而突然完成。否则,请继续执行步骤5。

5)执行此构造函数的其余部分。如果该执行突然完成,则出于相同原因,此过程也会突然完成。否则,此过程将正常完成。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515864.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号