Java中初始化的一个问题

gjanyanlig 2010-05-31 05:19:40
Java中的实例域初始化在什么时候开始执行的?
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
猫儿爷爷 2010-05-31
  • 打赏
  • 举报
回复
class a {}
class b extends a {}
class c
{
public static void mian ( String [] args )
{
a a = new b(); //a和b现在开始初始化了
//还有c因为你已经用到C类
}
}


class d
{
public static void mian ( String [] args )
{
d d = new d(); //d现在开始初始化了
}
}
猫儿爷爷 2010-05-31
  • 打赏
  • 举报
回复
class a {}
class b extends a {}
class c
{
public static void mian ( String [] args )
{
a a = new b(); //a和b现在开始初始化了
}
}


class d
{
public static void mian ( String [] args )
{
d d = new d(); //d现在开始初始化了
}
}


magicluo 2010-05-31
  • 打赏
  • 举报
回复
假如以类中分别有一个普通的属性和一个静态属性,同时类中还存在一个static 代码区域,那么这个类的对象的创建过程大致应该是这样:

1. 类第一次使用时,动态加载到JVM中。当首次创建该类的对象时,或者类中的静态方法、静态属性域首次被访问时,java解释器查找classPath,定位到类的class文件

2. 载入class文件,生成一个Class类型对象,所有有关的静态初始化动作都会执行,静态代码块,静态成员属性。 并且这种初始化动作只在Class对象首次加载时候进行一次。


3. 当用new 创建对象时,首先JVM在堆heap上为对象分配足够的存储空间


4. 存储空间清空,自动将对象中的所有基本类型数据都设置成了默认值,对象引用被设置为null



5. 执行所有在字段定义处的一些初始化操作



6. 调用构造器方法。(没有继承)
zhuzhusany 2010-05-31
  • 打赏
  • 举报
回复
被装载和实例化时
gjanyanlig 2010-05-31
  • 打赏
  • 举报
回复
应该是块初始化
xiesisi3 2010-05-31
  • 打赏
  • 举报
回复
这个问题比较笼统
域也有分静态和非静态之分.这一类的问题直接在CSDN搜索就一大堆

62,620

社区成员

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

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