最近想好好学学JAVA,就把以前的课本那出来看了,刚看了点,就有疑惑了.怎么跟我理解的不一样.
书上说(面向对象程序设计系列教材;Java语言程序设计;主编 殷兆麟;高等教育出版设):
    当构造一个类的实例时,编译器主要完成以下三件事情
   1、为对象分配内存空间
   2、初始化对象中实例变量的值,初始值可以是缺省值或者变量按指定的值初始化
   3、调用对象的构造方法如:
public class Point{
  static int x=0;     //类变量
  int y;              //实例变量
  public Point(int x,int y){
     Point.x=x;
     this.y=y;    
  } 
  public static void main(String arg[])
  {
      Point point=new Point(10,10);
  }
}我一直都以为是按1,3,2的顺序做的:构造方法中不就有this.y=y对实例变量的赋值操作吗。
如果在调用构造方法前就把实例变量给初始化了,那构造方法中那不是多余了吗。我想基本上是我的理解有问题。所以请各位指定一下,我究竟是哪里想错了

解决方案 »

  1.   

    是不是这样。
    如果我用Point point=new Point();创建对象,那第2步用默认的初始值初始化。如int i;中的i被初始化为0.再调用默认的构造函数
    如果我用Point point=new Point(10,10);创建对象,那第2步用默认的初始值初始化。如int i;中的i被初始化为0.然后再调用构造函数public Point(int x,int y)重新给实例变量初始化吗?
     
      

  2.   

    Point point = new Point()调用的是默认的构造器,也就是不带参数的,而new Point(10,10)则是调用你创建的那个构造函数,把两个参数传了进去,才完成初始化,如果不调用构造器初始化,使用缺省值,
      

  3.   


                   public Point(int x, int y) {
                     this.x=x;
                     this.y=y ;
               }
    你设定了带参数的构造方法,当你创建对象实例的时候,向里面传参数.10,10是你传进去的.而且构造方法是必须定义的,如果你自己不定义,虚拟器默认给你定义一个没有参数的.
      

  4.   

    构造函数是最后才会调用的,所以顺序应该是1,2,3。
    当你new一个新的对象的时候,该对象存放在堆中;而实例化则会将该引用存放在栈地址中;
    而显式构造函数永远都是在静态static和类初始化后才会被调用的
      

  5.   

    这个问题应该是这样的:首先肯定是1,2,3,的顺序。
    当编译器为对象分配好内存后,开始对它实例变量初始化,如果你给了实例变量一个值,那么编译器就会将这个值给这个实例变量。例如:int i =1;(这其中好象也并不是直接就将 1 赋给的 i ,而是首先将 0 ,也就是 int 型实例变量的默认初始化值赋给 i ,然后在将 1 赋给 i ,以前做过这样的实验,毕竟是自己做的,没有依据)。如果你没有给实例变量赋值,那么编译器就会将实例变量的默认值 赋给这个实例变量。例如 String 类型的赋给 null,int 类型的赋给 0 。最后调用构造方法,在你的例子中使用了 有参的构造方法。这些参数对应着实例变量。那么这个构造方法就有着更改实例变量的值的作用。很多情况下,你是不能确定实例变量的出始值的,这个时候,你就可以用构造方法进行传参。以便能够在使用对象之前对其实例变量的值进行必要的更改
      

  6.   


    想结贴结不了。
    提示总分和所给的分总和不等。
    查了好久,原来,错误在这
    :结帖的时候发现给自己回帖处自动加了10分。而且还不允许改为0,改不了。所以我有截图在本地的。
    为什么CSDN不能把本地的图片贴上来。插入图片时怎么都要输入http://地址的?