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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牵手相伴 中级黑马   /  2014-6-13 18:08  /  1612 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么显示初始化在构造代码块初始化之前执行呢

8 个回复

倒序浏览
额……同一个对象中构造函数永远只会在构造代码块之后执行。查查是不是不是一个对象,或者代码贴出来瞧瞧。
回复 使用道具 举报
查了回资料,嘿嘿,搞定了。
这是我的自己得出答案的过程。
一开始我就没太明白显示初始化的这个概念。
原来显示初始化就是:就是在本类中初始化这个成员变量。汗,我最开始的理解是在main函数中初始化了。
还有构造代码块的作用就是:用来定义不同对象共性的初始化内容。知道它的作用之后就好理解了。
看代码:

class  StructDemo
{
        public static void main(String []args)
        {
                 Person p = new Person();
                System.out.println(p.age);
               
                }
       
        }
       
       
class Person
{
        int age =10;//显示初始化age
//构造代码块
{
        this.age =20;       
        }
       
        }       
输出结果是:20。为什么呢?
还是根据它的概念来?
还有构造代码块的作用就是:用来定义不同对象共性的初始化内容。比如国籍。。
构造代码块中的内容覆盖了显示初始化的内容。
如果显示代码块在构造代码块之后执行的话?
那么当显示代码存在时,构造代码块就没有存在的意义了。那么此时显示初始化的内容将覆盖构找代码块的内容,这与构造代码块的概念有矛盾。

如果在main函数中的代码是这样的话:
Person p = new Person();
p.age =20;
System.out.println(p.age);
打印结果:
20.
为什么呢?
因为 Person p = new Person();这条语句表示对象已经初始化了。构造代码块也在这个过程中执行完毕。
p.age =20;这条语句在构造代码块之后执行,所以输出结果肯定是20.再一次对age赋值操作,原来的值就被覆盖了。
不对之处,欢迎更正。
回复 使用道具 举报
class BaseTest {
        public static void main(String[] args) {
                Person p = new Person();
                System.out.println(p.age);
        }
}

class Person {
        int age = 10;// 显示初始化age
        Person(){
                System.out.println(age+"构造函数");
        }
        // 构造代码块
        {       
                System.out.println(age+"构造代码块");
                this.age = 20;
        }
}
结果为:10构造代码块
              20构造函数
              20
这个结果也告诉了我们,程序执行的过程,先执行显示初始化int age = 10,在执行构造代码块,最后在执行构造函数,所以执行结果为20是必须的

       


回复 使用道具 举报
唐坚 发表于 2014-6-14 12:33
查了回资料,嘿嘿,搞定了。
这是我的自己得出答案的过程。
一开始我就没太明白显示初始化的这个概念。

很感谢这么详细的解答,现在明白了
回复 使用道具 举报
lzy418 发表于 2014-6-14 09:49
额……同一个对象中构造函数永远只会在构造代码块之后执行。查查是不是不是一个对象,或者代码贴出来瞧瞧。 ...

就是看了毕老师的讲课,他这样说的,当时有点迷惑,现在清楚了
回复 使用道具 举报
牵手相伴 发表于 2014-6-15 09:57
就是看了毕老师的讲课,他这样说的,当时有点迷惑,现在清楚了

知道回复的时候怎样添加附件吗
回复 使用道具 举报
原来是这样啊

回复 使用道具 举报
lzy418 中级黑马 2014-6-15 19:04:47
9#
牵手相伴 发表于 2014-6-15 10:29
知道回复的时候怎样添加附件吗

回复框右上角有高级模式,里面可以添附件。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马