黑马程序员技术交流社区

标题: 对象初始化问题 [打印本页]

作者: 牵手相伴    时间: 2014-6-13 18:08
标题: 对象初始化问题
为什么显示初始化在构造代码块初始化之前执行呢
作者: lzy418    时间: 2014-6-14 09:49
额……同一个对象中构造函数永远只会在构造代码块之后执行。查查是不是不是一个对象,或者代码贴出来瞧瞧。

作者: 唐坚    时间: 2014-6-14 12:33
查了回资料,嘿嘿,搞定了。
这是我的自己得出答案的过程。
一开始我就没太明白显示初始化的这个概念。
原来显示初始化就是:就是在本类中初始化这个成员变量。汗,我最开始的理解是在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赋值操作,原来的值就被覆盖了。
不对之处,欢迎更正。

作者: 焦国军    时间: 2014-6-14 12:54
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-15 09:54
唐坚 发表于 2014-6-14 12:33
查了回资料,嘿嘿,搞定了。
这是我的自己得出答案的过程。
一开始我就没太明白显示初始化的这个概念。

很感谢这么详细的解答,现在明白了
作者: 牵手相伴    时间: 2014-6-15 09:57
lzy418 发表于 2014-6-14 09:49
额……同一个对象中构造函数永远只会在构造代码块之后执行。查查是不是不是一个对象,或者代码贴出来瞧瞧。 ...

就是看了毕老师的讲课,他这样说的,当时有点迷惑,现在清楚了
作者: 牵手相伴    时间: 2014-6-15 10:29
牵手相伴 发表于 2014-6-15 09:57
就是看了毕老师的讲课,他这样说的,当时有点迷惑,现在清楚了

知道回复的时候怎样添加附件吗
作者: 龙泉长空    时间: 2014-6-15 10:52
原来是这样啊


作者: lzy418    时间: 2014-6-15 19:04
牵手相伴 发表于 2014-6-15 10:29
知道回复的时候怎样添加附件吗

回复框右上角有高级模式,里面可以添附件。





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