一道Java初始化面试题
来源:互联网 发布:15年股灾真相知乎 编辑:程序博客网 时间:2024/05/16 09:21
下面是道面试题,在此谈谈解题思路。
public class Test {public static int k=0;public static Test t1=new Test("t1");public static Test t2=new Test("t2");public static int i=print("i");public static int n=99;private int a=0;public int j=print("j");{print("构造块");}static {print("静态块");} public Test(String str) {System.out.println((++k)+":"+str+" i="+i+" n="+n); ++i;++n; } public static int print(String str) {System.out.println((++k)+":"+str+" i="+i+" n="+n); ++n; return++i; } public static void main(String args[]) {Test t=new Test("init"); }}1:j i=0 n=02:构造块 i=1 n=13:t1 i=2 n=24:j i=3 n=35:构造块 i=4 n=46:t2 i=5 n=57:i i=6 n=68:静态块 i=7 n=999:j i=8 n=10010:构造块 i=9 n=10111:init i=10 n=102
关于Java中类与对象的初始化问题,在上面可见一斑。在Java中,静态变量在类编译时初始化,非静态变量即实例变量在对象实例化时初始化,然后都是顺序展开的。
上面在编译过程中首先执行public static int k=0。
(1)、 然后是public static Test t1=new Test("t1");此时创建对象t1,此处先做实例变量的初始化:
private int a=0;public int j=print("j");{print("构造块");}
此时就有输出print("j");print("构造块");对应显示。然后才执行t1的构造函数;
接着public static Test t2=new Test("t2");有与(1)处同样的执行过程,在此不说。
然后是public static int i=print("i");接着又是static {print("静态块");}
最后Test t=new Test("init");先初始化实例变量
public int j=print("j");{print("构造块");}
然后才调用构造函数。
总结:父类静态代码块和变量->子类静态代码块和变量->父类非静态代码块->父类构造函数->->子类非静态代码块->子类构造函数
0 0
- 一道Java初始化面试题
- Java的一道面试题----静态变量初始化过程
- 一道JAVA面试题
- 一道java面试题
- 一道java面试题
- 一道java面试题
- 一道java面试题
- 一道java面试题
- 一道JAVA编程面试题
- 一道JAVA编程面试题
- 求解一道Java面试题。
- java 一道线程面试题
- 一道有趣java面试题
- 一道java经典面试题
- 一道JAVA IO面试题
- 一道JAVA IO面试题
- 浅谈一道java面试题
- 由一道面试题所想到的--Java实例变量初始化
- c#字符串加密与解密封装
- Java 加密算法体系结构
- 数据恢复软件设计与实现(一)
- phonegap for iOS插件例子
- 阻止android软键盘自动弹出
- 一道Java初始化面试题
- Linux的五个查找命令:find,locate,whereis,which,type
- Dubbo架构介绍
- Storyboard里面的几种Segue区别:push,modal,popover,replace和custom
- Disruptor一个开源的高效内存无锁队列
- MySQL执行计划解读
- 完全二叉树根据节点个数求叶子个数
- 正则表达式
- 北大dean的session