A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊玲 中级黑马   /  2013-3-16 13:49  /  1860 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 樊玲 于 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已经实实例化了怎么。。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

8 个回复

倒序浏览
构造代码块只是在创建对象的时候先于构造函数运行,具体代码的功能是根据需要定义的,并不一定就是用来实例化成员属性。
回复 使用道具 举报
我都不太了解你要问的问题是什么?
构造函数的作用是给对象进行初始化,对象一建立就会调用与之对应的构造函数。
而构造代码块的作用是给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。
回复 使用道具 举报
本帖最后由 何仕映 于 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, 下载次数: 71)

对象建立过程.JPG

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

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

挺详细的 ..
回复 使用道具 举报
樊玲 中级黑马 2013-3-16 14:56:13
8#
何仕映 发表于 2013-3-16 14:06
下面这个图是我总结的对象的建立过程Person p = new Person();为例。你可以参考一下。另外纠正一下,我认为 ...

3Q                  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马