黑马程序员技术交流社区

标题: 一道面试题 输出结果是什么 [打印本页]

作者: 从未有过的晴天    时间: 2014-6-25 00:23
标题: 一道面试题 输出结果是什么
class Demo {
                                static {
                                        System.out.println("AAA");
                                }

                                {
                                        System.out.println("BBB");
                                }

                                public Demo() {
                                        System.out.println("CCC");
                                }

                                public Demo(String name) {
                                        System.out.println("DDD");
                                }
                        }

                        测试类:
                                Demo d = new Demo();
                                Demo d2 = new Demo("hello");


作者: Alan_Kwan    时间: 2014-6-25 00:28
AAA
BBB
CCC
BBB
DDD

作者: m313786372    时间: 2014-6-25 00:31
AAA
BBB
CCC
BBB
DDD
作者: 师偃    时间: 2014-6-25 00:47
????
作者: eniuovn    时间: 2014-6-25 00:56
看隐藏:D
作者: 奋斗2014    时间: 2014-6-25 01:56
你那个类下面,直接用静态用{}是啥意思啊?
作者: 奋斗2014    时间: 2014-6-25 01:58
我觉得是ccc和ddd。
作者: 木华    时间: 2014-6-25 07:41
AAA,BBB,CCC,DDD,静态代码块先执行,然后代码块执行,参数为空的构造函数执行,参数不为空的构造函数执行
作者: 906822773    时间: 2014-6-25 07:44
AAA BBB CCC DDD 我认为
作者: 陈鹏83    时间: 2014-6-25 07:51
CCC
DDD



作者: 江祖贇    时间: 2014-6-25 07:53
Alan_Kwan 发表于 2014-6-25 00:28
AAA
BBB
CCC

一样的!
作者: 江祖贇    时间: 2014-6-25 07:55
静态代码块只执行一次!构造代码块有几个对象执行几次
作者: 会飞De石头    时间: 2014-6-25 08:28
奋斗2014 发表于 2014-6-25 01:56
你那个类下面,直接用静态用{}是啥意思啊?

那叫 构造代码块
作者: 会飞De石头    时间: 2014-6-25 08:31
其实 楼主你还应该再加上一个测试 :  创建匿名对象   new Demo();
作者: 韩天雷    时间: 2014-6-25 08:46
本帖最后由 韩天雷 于 2014-6-25 08:53 编辑

隐藏的是答案~
作者: 陈云阳    时间: 2014-6-25 09:11
aaa
bbb
ccc
bbb
ddd
作者: hhnog    时间: 2014-6-25 09:28
还要隐藏部分。。。先看看
作者: hhnog    时间: 2014-6-25 09:35
:L 我也被坑进去了
作者: 小生    时间: 2014-6-25 09:44
AAA
BBB
CCC
AAA
BBB
DDD
作者: 工作号    时间: 2014-6-25 09:46
AAA  BBB、 CCC  BBB    DDD
作者: z-翔    时间: 2014-6-25 09:52
AAA  BBB  CCC
BBB  DDD
看看对不对
作者: 张周飞    时间: 2014-6-25 09:54
过来看看 瞅瞅
作者: 钱途mo路    时间: 2014-6-25 09:56
AAA
BBB
CCC
BBB
DDD
作者: 王振2014    时间: 2014-6-25 10:01
aaa
bbb
ccc
bbb
ddd
作者: rao    时间: 2014-6-25 17:34
AAA BBB CCC BBB DDD
作者: 来自沙沙的我    时间: 2014-6-25 18:25
。。。                           
作者: 24岁???    时间: 2014-6-25 18:32
AAA
BBB
CCC
BBB
DDD
作者: alive    时间: 2014-6-25 19:28
AAA
BBB
CCC
BBB
DDD
作者: Meditator_guo    时间: 2014-6-25 19:40
AAA
BBB
CCC
BBB
DDD
作者: Meditator_guo    时间: 2014-6-25 19:44
静态代码块是在类加载时自动执行的,非静态代码块是在创建对象时自动执行的代码,不创建对象不执行该类的非静态代码块。且执行顺序为:静态代码块------非静态代码块----构造函数。所以这一段代码执行的结果为:
AAA
BBB
CCC
BBB
DDD
作者: crazystraw    时间: 2014-6-25 19:57
回顾了一下基础的部分
作者: laibin2    时间: 2014-6-25 19:59
看看咯

作者: Coup_D`etat    时间: 2014-6-25 20:07
江祖贇 发表于 2014-6-25 07:55
静态代码块只执行一次!构造代码块有几个对象执行几次

学习了:)
作者: 肥洋洋    时间: 2014-6-25 20:34
AAA BBB  CCC BBB DDD
静态代码块只会执行一次,而且最先执行,所以先输出AAA。每个构造函数里面有四部隐藏的步骤,1,执行super(),这里没有继承所以省略。2,执行构造代码块第一次new对象输出BBB。3,成员变量显示初始化,这里没有成员变量所以省略,4,才是执行构造构造函数。所以一次输出AAA BBB  CCC BBB DDD
作者: 3盐酸1硝酸    时间: 2014-6-25 20:38
你的题,我这边怎么看不全啊
作者: 今生无憾    时间: 2014-6-25 20:42
晕了。。。。。。。
作者: 寐海流风    时间: 2014-6-25 21:21
abcd,就这样
作者: 久违的微笑    时间: 2014-6-25 21:36
隐藏的是啥?
作者: 从未有过的晴天    时间: 2014-6-26 00:25
会飞De石头 发表于 2014-6-25 08:31
其实 楼主你还应该再加上一个测试 :  创建匿名对象   new Demo();

那不得晕死啊
作者: lindegen    时间: 2014-6-26 01:04
AAA BBB CCC BBB DDD
作者: 客剑    时间: 2014-6-26 02:11
学习了,好综合的样子

作者: Geek_001    时间: 2014-6-26 02:29
额来看看..................
作者: Geek_001    时间: 2014-6-26 02:31
AAA,BBB,CCC     AAA,BBB,DDD
作者: 郑飞    时间: 2014-6-26 02:56
ABCBD????????????
作者: 会飞De石头    时间: 2014-6-26 07:51
从未有过的晴天 发表于 2014-6-26 00:25
那不得晕死啊

要严谨嘛。。而且当创建匿名对象时,是会调用静态代码块的;顺便问一句,你是女生?
作者: LeaonButcher    时间: 2014-6-26 07:56
首先是静态代码块,它是随着类的加载而加载,所以最先调用它,输出AAA;
然后是构造代码块,它比构造函数先调用,用于初始化对象,输出BBB;
new Demo()调用无参构造函数,输出CCC;
第二次new Demo("hello")时,静态代码块的特点是只调用一次 所以这时不输出AAA;
然后接着输出BBB和DDD
作者: 小坏坏    时间: 2014-6-26 09:11
AAA
BBB
CCC
BBB
DDD
静态代码块的优先级别最高,只执行一次,构造代码块的优先级比构造函数高,所以BBB在前面。
作者: 爨庚轩    时间: 2014-6-26 09:44
AAA BBB CCC BBB DDD
这涉及到静态代码块和普通代码块的初始化时机,静态代码块在类初始化的时候执行,而不是在创建对象的时候执行,普通代码块在类的对象创建的时候执行,先于构造器执行,而且系统会追朔到其父类,先执行父类的初始化快和构造器
作者: 武维京    时间: 2014-6-26 09:59
看看隐藏!!!!!
作者: 卞新浩    时间: 2014-6-26 10:06
支持楼上的结果
作者: yue518    时间: 2014-7-14 13:11
学习中

作者: 汤姆纳斯    时间: 2014-7-14 13:43
看看结果是啥
作者: 黄宝宝    时间: 2014-7-14 16:30
A-B-C    B-D
作者: 沐子松/kf    时间: 2014-7-14 19:52
aaaa,bbbb,cccc,dddd
作者: 追求卓越    时间: 2014-8-4 17:48
根本看不懂啊,我还要多努力学习才行啊
作者: D.reamJA    时间: 2014-8-5 06:52
AAA BBB CCC DDD
作者: Hey丶小黑    时间: 2014-8-12 19:49
看看咯、
作者: 侯岩卿    时间: 2014-8-13 17:58
a d c d吧,看看答案
作者: 张亚军    时间: 2014-8-13 18:31
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
作者: 杨庆雷    时间: 2014-8-13 20:21
看一下         
作者: 菜鸟一号    时间: 2014-8-14 09:46

AAA
BBB
CCC
BBB
DDD
作者: Moriarty    时间: 2014-8-14 15:39
静态代码快,非静态点嘛快,构造函数。
作者: 萍水相逢    时间: 2014-8-14 19:03
执行顺序是AAA BBB CCC BBB DDD
作者: 李亚西    时间: 2014-8-14 21:26
好吧。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2