您的位置:程序门 -> java -> j2se / 基础类



一个java基础问题,


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


一个java基础问题,[已结贴,结贴人:olifeo]
发表于:2007-03-01 14:15:20 楼主
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,为嘛??
发表于:2007-03-01 14:16:521楼 得分:0
为什么可以在声明变量之前打印这个变量?
它咋的就知道这是个int的还是string的??
发表于:2007-03-01 14:18:462楼 得分:0
错啦
这样输出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);
        }
}
发表于:2007-03-01 14:19:523楼 得分:0
各位java牛牛给解释解释吧~
发表于:2007-03-01 14:30:514楼 得分:0


楼主的程序,输出null才对.
发表于:2007-03-01 14:33:175楼 得分:0
int的才是0

忘了是tij还是scjp模拟题里面有讲解
发表于:2007-03-01 14:40:336楼 得分:0
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);
        }
}
发表于:2007-03-01 14:40:537楼 得分:0
程序真是神经病~
发表于:2007-03-01 14:42:118楼 得分:0
这种东西,看了就头疼,如果能完全搞明白,就是牛人了
发表于:2007-03-01 14:47:199楼 得分:10
首先分析一下应该是由父类的构造器里调用test()函数这时instancevalue 已经被声明还未被初始化
就像是
声明如下的类:
public   class   a{

    private   int   i;
    public   a(int   i)
      {
          this.i   =   i;
        }
   
}
你说this.i 在被赋值之前是几?
发表于:2007-03-01 14:49:1610楼 得分:0
http://blog.csdn.net/eric_ranch/archive/2007/02/07/1504413.aspx
http://wfengxiao.spaces.live.com/blog/cns!d1042b4458031c52!119.entry
发表于:2007-03-01 14:50:1511楼 得分:0
部分初始化(partially   initialization)现象。tij的相关章节有介绍。

应该尽量避免出现部分初始化现象,明智的作法是:不在要构造函数中调用多态方法。
发表于:2007-03-01 15:26:5512楼 得分:0
情况应该是这个样子的,根据子类对象的实例化过程(参张孝祥java   p129)1,new   之后分配成员变量存储空间并进行默认初始化:关键是默认初始化而不是显式初始化,   2,然后根椐参数选择构造方法,当然这里是无参的,,然后显式或隐式的追溯父类的构造方法,在其中调用了已被覆盖的test(),并输出了已被默认初始化了的int型变量,,值为0,(可以解释了如果改int为string型的话值为null),   3,最后才显式初始化了private   int   instancevalue   =   20;  


默认初始化这个是关键所在吧   ~~


快速检索

最新资讯
热门点击