如下:
建造一个类
class A
{
  A(){}
}
class B{
  B(){}
}
下面的情况各发生了什么事情?
一:A a=new A();
二:new A();
三:如果在类A中还有静态的成员变量(已赋值)或静态成员函数,以上语句又各发生什么事情?
四:如果在类A中还有静态的成员变量(已赋值),B中有A的对象实例,B a=new B(); new B();发生了什么事情。
注:我指的发生落伍什么事情主要指他们各自执行的顺序,和那些执行了,那些没有执行,怎么执行的(内存中的情况)。看了《think in java》上“静态数据的初始化”那想到的,有点模糊。

解决方案 »

  1.   

    A a=new A() 声明一个引用变量 :要求java虚拟机分配空间给引用变量,并将此变量命名为a.
    new A()先调用A的构造方法了,然后返回一个引用.
    其他的也不是很清楚
      

  2.   

    JAVA的整体初始化顺序:父类静态初始化→子类静态初始化(在main方法之前)→子类创建对象后→父类的非静态变量初始化→父类的构造方法初始化→子类的非静态变量初始化→子类的构造方法初始化。
      

  3.   

    建议楼主感性认识一下吧,step into...
      

  4.   

    一:A a=new A();
       因为A类没有显式的声明父类,所以系统自动使该类继承Object,所以在调用A的构造方法时,系统首先调用Object类的构造方法,然后再调用A的构造方法。而new会在JAVA虚拟机的堆内存中申请空间,存储A对象的内容,然后把该对象在堆内存中的首地址赋值给对象a。
    二:new A(); 
       创建对象的过程和一一样,只是由于没有指向该对象的引用,该对象会被认为是垃圾对象,很快就会被垃圾收集器收集,释放占用的内存。
    三:如果在类A中还有静态的成员变量(已赋值)或静态成员函数,以上语句又各发生什么事情? 
       如果有静态变量,则在第一次使用该类时,如创建对象或调用该类的构造方法,为该变量申请内存,以后再也不会申请了。
        如果是静态成员函数,则会自动初始化该方法,以后就直接调用了。
    四:如果在类A中还有静态的成员变量(已赋值),B中有A的对象实例,B a=new B(); new B();发生了什么事情。
        对象的初始化过程和一一样,如果有属性的话,在执行构造方法内部的代码以前,会初始化属性。
      

  5.   

    建议楼主看哈THINKING IN JAVA种关于成员初始化这部份,里面有详细的说明。
    CSDN种就有电子书下。