变量不初始化,可以使用(如输出变量的相应值)吗?我一直以为是不可以的。如下:
String s;
System.out.println(s);//报错。但是下面这个例子没有初始化,怎么就可以呢?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【lord_is_layuping】截止到2008-06-25 21:54:08的历史汇总数据(不包括此帖):
    发帖数:117                发帖分:2251               
    结贴数:101                结贴分:2231               
    未结数:16                 未结分:20                 
    结贴率:86.32 %            结分率:99.11 %            
    楼主加油
      

  2.   

    全局变量会自动赋予初值
    对象为null int 为0等,
    局部变量的话就要初始化才能使用
      

  3.   

    就是这里,“没有赋值,int型缺省为0,所以就打了Target=> 0出来”
    class Depend
    {
        int i = 10;
        public Depend()
        {
            print();
            i = 20;
        }    void print()
        {
            System.out.println("Depend=> " + i);
        }
    }
    public class Qdb extends Depend
    {
        int i = 30;
        public Qdb()
        {
            print();
            super.print();
            i = 40;
        }    void print()
        {
            System.out.println("Target=> " + i);
        }    public static void main(String[] args)
        {
            new Qdb();
        }
    }执行new Qdb();时,首先初始化超类的字段i(=10),接着调用超类的构造方法
        public Depend()
        {
            print();
            i = 20;
        }
    但是这个print()是调用Qdb类的,因为Qdb重写了这个方法,而此时Qdb中的i声明了但还没有赋值,int型缺省为0,所以就打了Target=> 0出来,然后给超类的i重新赋值20接着Qdb给i赋值30,然后再执行Qdb的构造方法
        public Qdb()
        {
            print();
            super.print();
            i = 40;
        }
    这个时候print()打印出Target=> 30就很正常了,super.print()就直接定位到超类里去了,因为超类的i已经被重新赋值20了,所以打印Depend=> 20 
      

  4.   

    实例变量输出默认值
    String型的输出null
    局部变量必须初始化
      

  5.   

    呵呵.最近看了那个深入JVM之后才知道,首先是分配空间,这一步不算是初始化的,但也给了一个默认值的.