如果我们已经定义好一个publicl类型的类Parameters。下面的语句:
Parameters p=new Parameters();可以用p=new Parameters();来代替吗?请说明原因。

解决方案 »

  1.   

    其实就是啥时候初始化的问题,先定义在java虚拟机加载的时候会先初始化为null,然后运行到p=new Parameters();的时候再赋值。
      

  2.   

    看定义的是什么变量,成员的还是局部的,照楼主描述肯定是成员的了
    这种东西不应该看原因,而是看过程所带来的意义,很多事情因为有相对的意义,所以才会存在
    举个例子,先定义好一个publicl类型的类Parameters,就好比先和朋友约好去看电影
    再p=new Parameters();就是到了电影院后再选择具体看哪个
    如果直接Parameters p=new Parameters();就好比直接和朋友约好看哪个电影还有一种情况就是,你定义了成员变量Parameters p,然后再局部中又定义了Parameters p,这2个p是不同的,简单的例子class  gogogo
    {
    static int i=0;
    public static void main(String[] args) 
    {
    int i=1;//可以把这句去掉
    System.out.println(i);
    }
    }结果是1
    说明main中的i与外部的i无关,因为不同的生命周期,所以可以被声明和在同声明周期下使用
      

  3.   

       这个问题关系到对象的申明和实例化问题
      下面来详细叙述: 
    //1.这种情况下会报错
    Parameters p;
    Parameters p=new Parameters();
    //2.这种情况是对的 这种情况是先申明对象p,之后再实例化p.
    Parameters p;//申明对象p
    p=new Parameters();//实例化p
    //3.这种情况是在申明对象的同时实例化了对象
    Parameters p=new Parameters();
      

  4.   

    要先定义,也就是让jvm先认识你的这个p是什么东西,要是你直接写p=new Parameters();这个时候jvm不认识你的p,编译通不过,你要先定义,也就是告诉jvm,告诉它p是Parameters的对象的一个引用,然后就可以直接写p=new Parameters();
    当然还要注意全局和局部的问题