关于new的问题

franz lee 2007-10-16 07:00:17
如下:
建造一个类
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》上“静态数据的初始化”那想到的,有点模糊。
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SnowwhiteYqw 2007-10-17
  • 打赏
  • 举报
回复
建议楼主看哈THINKING IN JAVA种关于成员初始化这部份,里面有详细的说明。
CSDN种就有电子书下。
nbeliu 2007-10-17
  • 打赏
  • 举报
回复
楼上的厉害!
网络咖啡 2007-10-17
  • 打赏
  • 举报
回复
一: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();发生了什么事情。
对象的初始化过程和一一样,如果有属性的话,在执行构造方法内部的代码以前,会初始化属性。
Yanbin_Q 2007-10-17
  • 打赏
  • 举报
回复
建议楼主感性认识一下吧,step into...
Computeryp 2007-10-16
  • 打赏
  • 举报
回复
JAVA的整体初始化顺序:父类静态初始化→子类静态初始化(在main方法之前)→子类创建对象后→父类的非静态变量初始化→父类的构造方法初始化→子类的非静态变量初始化→子类的构造方法初始化。
fifikilltt 2007-10-16
  • 打赏
  • 举报
回复
A a=new A() 声明一个引用变量 :要求java虚拟机分配空间给引用变量,并将此变量命名为a.
new A()先调用A的构造方法了,然后返回一个引用.
其他的也不是很清楚。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧