Java面试题之 static执行顺序
下面代码执行后最终的结果是:
public class StaticDemoSupper {static {System.out.println("A");}/*** */public StaticDemoSupper() {System.out.println("B");}}public class StaticDemoChild extends StaticDemoSupper {static{System.out.println("C");}/*** */public StaticDemoChild() {System.out.println("D");}public static void main(String[] args) {new StaticDemoChild();}}
A
C
B
D
执行顺序是:父类的静态代码块,子类的静态代码块 父类的构造方法,子类的构造方法
(1) 遇 到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成 这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候,读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量 池的静态字段除外)的时候,以及调用一个类的静态方法的时候。
(2) 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
(3) 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
(4)当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。
只有上述四种情况会触发初始化,也称为对一个类进行主动引用,除此以外,所有其他方式都不会触发初始化,称为被动引用
静态代码块中会在编译阶段初始化到类的常量池中
转载于:https://www.cnblogs.com/wei-zw/p/8797739.html
Java面试题之 static执行顺序相关推荐
- java编程顺序,Java种的完整构造执行顺序(转)
Java类的完整构造执行顺序(转) 转自:http://hi.baidu.com/zhengguobest/blog/item/09a97f0e0eba7dca7bcbe1b1.html 如果父类有静 ...
- 举例说明Java中代码块的执行顺序
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 结论 这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的 ...
- java顺序结构类型,Java类的完整构造执行顺序
这里只说一个完整的结果,至于为什么是这样的顺序,可以参考我以前的文章:深入剖析java类的构造方式 如果父类有静态成员赋值或者静态初始化块,执行静态成员赋值和静态初始化块 如果类有静态成员赋值或者静态 ...
- Java中finally和return执行顺序
思考一个问题 Java异常捕获机制try-catch-finally块中的finally语句是否一定会被执行?起码在以下两种情况下是不会被执行的: 1.在try之前就返回了,try没有执行到. 2.t ...
- JAVA——监听器ActionListener与MouseListener执行顺序
基本概念 监听器(Listener):监听器用于监听web应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器对 ...
- java 多线程Callable和Runable执行顺序问题详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt125 毫无疑问 Runnable会进行异步执行,此处不多说,主要说明Call ...
- java类与继承的执行顺序
1.子类 public class TestClassLife extends TestClassLifeSuper { public TestClassLife() {System.out.prin ...
- java子类代码块_java中父类子类静态代码块、构造代码块执行顺序
父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class ...
- 面试官:Java中线程是按什么顺序执行的?
本文分享自华为云社区<[高并发系列]Java中线程到底是按什么顺序执行的?你了解的可能是错误的!>,原文作者:冰 河 . Java中线程的执行顺序可能与你想的不一样!一文解密多线程的执行顺 ...
- Spring面试之不同版本AOP执行顺序详解
1.AOP常用注解: @Before 前置通知:目标方法之前执行 @After 后置通知:目标方法之后执行(始终执行) @AfterReturning 返回后通知:执行方法结束前执行(异常不执行) @ ...
最新文章
- javascript基础——文字变大变小className的使用及JS浮动的兼容用法
- 【Python】KNN简单的判别预测
- Java IO知识点
- MySQL(二): 表的增删查改
- matlab怎么写集合,matlab集合操作
- 查看 Proxy 的 $ProxyX.class文件
- VMware Linux VDI 安装步骤
- Chrome 可移动绿色版
- 21天 Jenkins打卡-Day1 环境准备
- 使用finalize/dispose 模式提高GC性能(翻译)
- 今天加入了OSChina,准备将我的BLOG搬到这里。
- 计算机网络系统什么组成,计算机网络系统是由什么组成的
- qq空间把android改成iphone,qq空间利用代码修改iPhone6 Plus qq空间修改手机型号教程...
- 为什么我停掉孩子所有的兴趣班,也没停掉编程!
- 软件设计 基础篇(二) 交互设计
- RNA-seq 详细教程:实验设计(2)
- Python的字典中动态添加键值对
- 【转】地心历险记 2:神秘岛 迅雷 下载 地址|神秘岛 高清 下载地址
- 如何将一个逻辑库下所有数据集的名称汇总生成新的数据集BY:crackman
- 32位64位Eclipse和jdk对应关系说明【初学者适用】