您的位置:首页 > 职场人生

Android(java)学习笔记188:关于构造代码块,构造函数的一道面试题(华为面试题)

2015-08-23 10:02 615 查看
1.源码是:

package text;

public class TestStaticCon {

public static int a = 0;

static {
a = 10;
System.out.println("静态代码块在执行a="+a);
}

{
a = 8;
System.out.println("非静态代码块在执行a="+a);
}

public TestStaticCon() {
this("带参构造方法在执行a="+a);
System.out.println("无参构造方法在执行a="+a);

}

public TestStaticCon(String n) {
System.out.println(n);
System.out.println(a);
}

public static void main(String[] args) {
TestStaticCon tsc = null ;
System.out.println("!!!!!!!!!!!");
tsc = new TestStaticCon();
}

}


程序运行的结果如下:





(1)TestStaticCon tsc = null; 类进内存,开始进行类的初始化动作,有静态成员,静态先做初始化。
(2)输出了 !!!!!!!!!!
(3)tsc = new TestStaticCon();

♦ 进入无参的构造方法;这里是关键点了!!!

[b] ♦ 执行了this("带参构造方法在执行a=" + a);这里就是原因所在了,这时a的值任然是上一次static代码块执行时赋予的10;[/b]

[b] ♦ 进入了带参数的构造函数,而参数 String n已经记录了this("带参构造方法在执行a=" + a);中的字符串参数。也就意味着这里a的值已经被固定了,因为它已经是一个String了。[/b]

[b] ♦ 这时进入了构造代码块,也就是非static代码块,在这里 a = 8;然后输出 “非静态代码块在执行a=8“。[/b]

[b] ♦ System.out.println(n);执行,记住这里输出的是String类型了,与 a 已经无关了。[/b]

[b] ♦ 回到无参的构造方法中执行System.out.println("无参构造方法在执行a=" + a); 这里的 a 是经过在 构造代码块中赋值为 8 的 a了。[/b]

这里的考点应该是:构造代码块只会执行一次。在构造函数中调用构造函数,无论怎么调用最终都会有一个构造函数去执行构造代码块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: