黑马程序员技术交流社区

标题: 构造代码块 [打印本页]

作者: 樊玲    时间: 2013-3-16 13:49
标题: 构造代码块
本帖最后由 樊玲 于 2013-3-16 14:54 编辑




class  Demo1
{
        public static void main(String[] args)
        {
                A  a=new A();
        }
}
class A
{
        int num=2;
        {
                System.out.println(num);
        }
        A()
        {
                System.out.println(num);
        }
}

结果:2
         2

不是构造函数,默认有this() ,并对对象进行实例化,并实例化属性的吗。。。。 构造代码块执行的时候,num已经实实例化了怎么。。
作者: 范天成    时间: 2013-3-16 13:57
构造代码块只是在创建对象的时候先于构造函数运行,具体代码的功能是根据需要定义的,并不一定就是用来实例化成员属性。
作者: 刘国涛    时间: 2013-3-16 14:03
我都不太了解你要问的问题是什么?
构造函数的作用是给对象进行初始化,对象一建立就会调用与之对应的构造函数。
而构造代码块的作用是给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。
作者: 何仕映    时间: 2013-3-16 14:06
本帖最后由 何仕映 于 2013-3-16 14:08 编辑

下面这个图是我总结的对象的建立过程Person p = new Person();为例。你可以参考一下。另外纠正一下,我认为是在你没有定义构造函数的时候,系统会自动给你加一个空参数的构造函数,不是this();
在你的这个程序中对象的建立过程是
1、建立属性值num并被默认初始化,num=0;   
2、进行显示初始化num=2;   
3、构造带模块运行进行,打印第一个2;
4、构造函数运行,打印出第二个2

对象建立过程.JPG (33.31 KB, 下载次数: 66)

对象建立过程.JPG

作者: 孙晋学    时间: 2013-3-16 14:36
成员变量显式的初始化顺序:1、直接赋值  --->2、构造代码块 ----> 3、构造函数
在第一步,如果没有用=赋值,默认初始化为0
后面会依次执行,此外构造代码块也不一定用来初始化成员变量,也可以做其他的操作
作者: Alex shaw    时间: 2013-3-16 14:48
构造代码块就是给对象初始化用的
作者: 樊玲    时间: 2013-3-16 14:55
郭宝伦 发表于 2013-3-16 14:09
静态代码块是第一个执行,先执行父类的再执行子类的;父类的构造代码块和构造函数优先于子类执行。
class F ...

挺详细的 ..
作者: 樊玲    时间: 2013-3-16 14:56
何仕映 发表于 2013-3-16 14:06
下面这个图是我总结的对象的建立过程Person p = new Person();为例。你可以参考一下。另外纠正一下,我认为 ...

3Q                  




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