标题: 关于构造代码块的问题 [打印本页] 作者: java陈辉 时间: 2013-12-18 20:50 标题: 关于构造代码块的问题 下面这段代码为什么先执行了构造代码块中的语句,然后在执行构造函数中的语句?而不是只执行构造函数里面的语句,不执行构造代码块的语句?构造代码块里面的语句一定要执行吗?求解释。
public class Test {
public static void main(String[] args) {
new A();
}
}
class A
{
int num=8;
{
System.out.println("cons code num="+num);
}
A(){
System.out.println("cons function num="+num);
}
}
作者: 冯晓骏 时间: 2013-12-18 21:03
http://www.cnblogs.com/ShawnWithSmallEyes/p/3374235.html作者: 做个有理想的人 时间: 2013-12-18 21:06
先执行构造代码块→后执行构造函数 , 构造代码块是给所有对象进行统一初始化。而构造函数只给对应的对象初始化。只要new一个对象2个一定都执行的
public class Test {
public static void main(String[] args) {
new A();
}
}
class A
{
int num=8;
{ int num=82;
System.out.println("cons code num="+num);//构造代码块先执行cons code num=82
}
A(){
int num=18;
System.out.println("cons function num="+num);//构造函数后执行cons function num=18
}
} 作者: hurryup 时间: 2013-12-18 21:16
毕老师有讲过的,一个对象实例化的过程如下:
(1)加载classA进内存;
(2)加载该类的静态变量、静态代码块、静态方法,所有静态依据代码顺序执行;
(3)执行该类的构造代码块;
(4)在内存开辟空间,加载该类的非静态变量,并默认初始化;
(5)执行该类类构造函数;
(6)给变量显示初始化。作者: litaojisuanji 时间: 2013-12-18 21:21
感觉没有为什么,就像问为什么System.out.println()是输出语句,就是按照顺序执行的。
先静态代码块初始化,再构造代码块初始化,再父类构造器初始化,
再显示初始化,再子类构造器初始化。作者: yjgoss 时间: 2013-12-18 21:45
构造函数:
作用:对象一建立就会调用与之对应的构造函数,所以可以给对象进行初始化。
构造代码块:作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。
构造代码块与构造函数的区别:构造代码块是给所有对象进行统一初始化。而构造函数只给对应的对象初始化
楼主的public class Test {
public static void main(String[] args) {
new A();
}
}
class A
{
int num=8;//这是构造代码块,优于构造函数先执行。
{
System.out.println("cons code num="+num);
}