Topic: 请教大家一个问题,关于类装载、实例化。

  Print this page

1.请教大家一个问题,关于类装载、实例化。 Copy to clipboard
Posted by: gyang373
Posted on: 2004-09-09 16:14

请教大家一个问题,关于类装载、实例化。
class CData{
CData(){System.out.println("data is set");}
}
class LoadP{
static CData cd1 = new CData();
private CData cd2 = new CData();
LoadP(){System.out.println("parent construct");}
}
class LoadC extends LoadP{
LoadC(){System.out.println("child construct");}
}
class LoadC2 extends LoadP{
LoadC2(){System.out.println("another child construct");}
}
class LoadTest{
LoadTest(){System.out.println("init");}
public static void main(String[] args){
LoadC lc = new LoadC();
LoadC2 lc2 = new LoadC2();
}
}
如上所述,
1、执行LoadC lc=new LoadC()时;先装入LoadP.class,再装入LoadC.class,不知正确否(将CData视为数据,暂不讨论)?
2、执行实例化时,根据.class 给实例变量分配内存,而不给方法和类变量分配?
3、cd2为父类的私有变量,为什么实例化其子类时,也要为cd2分配内存?
4、如果父类是抽象类,情况变为什么?
还希望专家具体分析一下,实例化是内存的具体分配过程

2.Re:请教大家一个问题,关于类装载、实例化。 [Re: gyang373] Copy to clipboard
Posted by: gyang373
Posted on: 2004-09-09 17:03

到处问,也没个人回答。

3.Re:请教大家一个问题,关于类装载、实例化。 [Re: gyang373] Copy to clipboard
Posted by: jerry010
Posted on: 2004-09-09 21:24

在执行LoadC lc=new LoadC()时,JAVA编译器会让继承类的构造函数自动调用基类的构造函数来保证基类子对象的正确初始化,构造顺序由基类向外扩展,所以是先载入LoadP。

在初始化的过程中,变量的初始化优先于任何方法,包括构造函数,所以不难理解为何cd2也会分配内存。

如果父类是抽象类,你必须实现抽象类中的所有方法,否则,你的子类也会被JVM要求声明定义成为abstract。

4.Re:请教大家一个问题,关于类装载、实例化。 [Re: gyang373] Copy to clipboard
Posted by: menzy
Posted on: 2004-09-09 21:24

1. 执行LoadC lc=new LoadC()时,先试图初始化LoadC,由于LoadC extends LoadP, 而LoadP包含两个CDate成员且在定义的时候初始化,所以首先初始化两个CData对象。然后调用LoadP的缺省构造方法,接着调用LoadC的缺省构造方法。
执行LoadC2 lc2 = new LoadC2()的时候,由于LoadP的成员有一个是static的,不用初始化,所以只调用了一次CDate,然后依次调用LoadP和LoadC的缺省构造方法。
2. 同一类,其实例数据堆栈不同,方法一致,方法控制堆栈只有一处。
3. 不用回答,在对象体内定义并初始化的成员,在构造时需要init.
4. 过程基本同上,只是不会构造abstract class对象。

5.Re:请教大家一个问题,关于类装载、实例化。 [Re: gyang373] Copy to clipboard
Posted by: gyang373
Posted on: 2004-09-09 21:39

实例化一个子类对象时,不应该创造出一个父类对象来吧。
我认为,只能创建一个子类对象,其中这个子类对象的实例变量包含自己的变量和从父类继承来的变量。而方法不用再在内存中创建。

6.Re:请教大家一个问题,关于类装载、实例化。 [Re: gyang373] Copy to clipboard
Posted by: gyang373
Posted on: 2004-09-10 18:08

oop


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923