黑马程序员技术交流社区

标题: 关于构造代码块的问题 [打印本页]

作者: 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);
     }

     A(){
             System.out.println("cons function num="+num);//这是构造函数,后执行,
     }
楼主明白了吗
作者: 恨死我了    时间: 2013-12-19 09:53
静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
构造函数:  给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。               
创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数




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