Android(java)学习笔记188:关于构造代码块,构造函数的一道面试题(华为面试题)
2015-08-23 10:02
615 查看
1.源码是:
程序运行的结果如下:
(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]
这里的考点应该是:构造代码块只会执行一次。在构造函数中调用构造函数,无论怎么调用最终都会有一个构造函数去执行构造代码块。
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]
这里的考点应该是:构造代码块只会执行一次。在构造函数中调用构造函数,无论怎么调用最终都会有一个构造函数去执行构造代码块。
相关文章推荐
- 一个合格的程序员应该读过哪些书
- 黑马程序员-----Java基础-----IO流-1
- 黑马程序员-[OC]学习之旅-(构造与内存管理)
- 程序员的出路在哪里
- 【LeetCode-面试算法经典-Java实现】【172-Factorial Trailing Zeroes(阶乘尾后0的数目)】
- 【LeetCode-面试算法经典-Java实现】【171-Excel Sheet Column Number(Excel表行号)】
- 【LeetCode-面试算法经典-Java实现】【169-Majority Element(主元素)】
- 黑马程序员-JAVA基础之IO流(2)
- 黑马程序员-JAVA基础之IO流(1)
- Hadoop,MapReduce,HDFS面试题
- 黑马程序员--Java基础学习(其他对象和IO流)第十八天
- 黑马程序员-JAVA基础之集合框架
- 黑马程序员--Java基础学习(集合工具类)第十七天
- java面试需要注意的面试题
- andrid面试题
- andrid面试题
- andrid面试题
- 黑马程序员——集合——Collection和单列集合List
- 黑马程序员--Java基础学习(集合框架)第十五天
- java面试题笔记2015-08-22