一道简单有趣的java题:输出顺序的问题
2011-11-19 02:38
260 查看
Java构造方法中的执行顺序
SEP 8TH, 2013 | COMMENTS这道题来自 stackoverflow。
问题描述:
有如下代码,求其输出内容。1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [code]public class Test { public int a = 10; Test(){System.out.println("1");} {System.out.println("2");} static{System.out.println("3");} public static void main(String args[]) { new Test(); } } |
分析
作为静态区段的语句,容易知道,3 是会最先出现的。容易弄错的一点是 到底是 1 和 2 的出现顺序。我们可以参考字节码来分析。在 eclipse 中使用 ASM bytecode 插件,得到相应的字节码:1 2 3 4 5 6 7 8 9 10 11 12 13 1415 | [code]// class version 50.0 (50) // access flags 0x21 public class Test { // compiled from: Test.java static <clinit>() : void GETSTATIC System.out : PrintStream LDC "3" INVOKEVIRTUAL PrintStream.println(String) : void RETURN <init>() : void ALOAD 0: this INVOKESPECIAL Object.<init>() : void ALOAD 0: this BIPUSH 10 PUTFIELD Test.a : int GETSTATIC System.out : PrintStream LDC "2" INVOKEVIRTUAL PrintStream.println(String) : void GETSTATIC System.out : PrintStream LDC "1" INVOKEVIRTUAL PrintStream.println(String) : void RETURN public static main(String[]) : void NEW Test INVOKESPECIAL Test.<init>() : void RETURN } |
相关文章推荐
- 论坛上看到的一个java输出顺序问题。
- 【技术】Java入门:e.printStackTrace()和System.out输出顺序混乱的问题
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
- 一些基础的java问题及一道简单的java题和我的回答
- 一道Java程序输出题(继承-重载-覆盖-向上转型的问题)
- 一个简单有趣的java文件输出
- java--一道简单的括号匹配问题
- [Java多线程]ABC三个线程顺序输出的问题
- Java的简单输入输出问题
- (埋葬那些在网上把简单问题复杂化专业化把垃圾答案胡乱贴的懵懂派)一道月薪3W的java面试题 (小明和小强都是张老师的学生,张老师的生日是某月某日,2人都不知道张老师的生日)
- java--一道简单的括号匹配问题
- 一、问题 MyEclipse怎么导出可运行的jar包。 二、测试环境 MyEclipse V8.6 三、操作过程 1、java项目没有导入第三方jar包的情况 这时候打包就比较简单: ①首先在MyE
- 一道有趣的面试题————待解决的问题
- 剖析一个java对象初始化顺序问题
- java构造代码块执行顺序问题
- Android Studio 中运行java代码及控件台输出中文乱码问题记录
- java中static相关问题,执行顺序等
- 输出表达式中的顺序点问题
- java函数重载简单问题体现继承问题
- windows环境下使用命令行执行java程序输出文件编码问题