public class Parent
{
    public Parent()
    {
        this.test();
    }    public void test()
    {
    }    public static void main(String[] args)
    {
        new Child();
    }}class Child extends Parent
{
    private String instanceValue;
    
    public void test()
    {
        System.out.println("instance value is: " + instanceValue);
    }
}
输出0,为嘛??

解决方案 »

  1.   

    为什么可以在声明变量之前打印这个变量?
    它咋的就知道这是个int的还是String的??
      

  2.   

    错啦
    这样输出0
    public class Parent
    {
        public Parent()
        {
            this.test();
        }    public void test()
        {
        }    public static void main(String[] args)
        {
            new Child();
        }}class Child extends Parent
    {
        private int instanceValue = 100;
        
        public void test()
        {
            System.out.println("instance value is: " + instanceValue);
        }
    }
      

  3.   

    楼主的程序,输出null才对.
      

  4.   

    int的才是0忘了是TIJ还是SCJP模拟题里面有讲解
      

  5.   

    package com.action;import java.util.*;public class Parent
    {
        public int instanceValue = 100;
        public int i;
        public Parent()
        {
           
            this.test();
        }    public void test()
        {
        }    public static void main(String[] args)
        {
            new Child();
        }}class Child extends Parent
    {
        //注释掉这一句打印100 不注释掉打印0????????
        public int instanceValue = 200;
        
        public void test()
        {
            System.out.println("instance value is: " + instanceValue);
        }
    }
      

  6.   

    首先分析一下应该是由父类的构造器里调用Test()函数这时instanceValue 已经被声明还未被初始化
    就像是
    声明如下的类:
    public class A{  private int i;
      public A(int i)
       {
         this.i = i;
        }
      
    }
    你说this.i 在被赋值之前是几?
      

  7.   

    http://blog.csdn.net/eric_ranch/archive/2007/02/07/1504413.aspx
    http://wfengxiao.spaces.live.com/blog/cns!d1042b4458031c52!119.entry
      

  8.   

    部分初始化(Partially Initialization)现象。TIJ的相关章节有介绍。应该尽量避免出现部分初始化现象,明智的作法是:不在要构造函数中调用多态方法。
      

  9.   

    情况应该是这个样子的,根据子类对象的实例化过程(参张孝祥java P129)1,new 之后分配成员变量存储空间并进行默认初始化:关键是默认初始化而不是显式初始化, 2,然后根椐参数选择构造方法,当然这里是无参的,,然后显式或隐式的追溯父类的构造方法,在其中调用了已被覆盖的test(),并输出了已被默认初始化了的int型变量,,值为0,(可以解释了如果改int为string型的话值为null), 3,最后才显式初始化了private int instanceValue = 20; 
    默认初始化这个是关键所在吧 ~~