问加载类与初始化类区别 想问问加载类到底是做些什么事啊? 我知道加载跟初始化是两回事, 但还请教前辈们他们到底都干些什么呢? 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我不能讲得很清楚深入,建议 查看 <<深入java 虚拟机>> 这本书上讲得清楚 答:以下是凭头脑中的一点记忆与理解写下的,可能不是很正确。(具体去看《JVM规范》)大致是:一、类的装载大致有:1)将类的代码从源(硬盘、网络、内存中的字节数组等等)装载入内存,创建该类在内存中的表示映像。若该类有父类且没有装入,则还要装入父类,以及父类的父类2)连接。大致有:a)验证类字节码(如:结构上正确否;以及其它强制性遵守的规则)。b)准备。如:对类中的static数据成员分配空间,并初始化成它们的默认值(注:这个初始化不是指:类的初始化。初始化成它们的默认值不会执行任何JVM机器指令的)c)解析。对运行时常量池中称号引用进行解析。(如:若引用到其它类或接口,则要进行一步装载这些类或接口)分为:数据成员解析、方法解析等。d)访问控制处理。二、类初始化:哪些操作会引起类的初始化操作?(如果类还没有初始化)大致有:1)new 生成该类或子类的对象2)读/写该类的static型数据成员3)调用该类的static方法。4)通过反射类中的方法,如:Constructor对象中的newInstance(...)方法。5)JVM启动时自动装入的一些类(如:自动装载入java.io.Serializable接口) 类的初始化其实就是执行类中的static{...}代码块而已。类中定义的如:static int si=20;这样的static数据成员的初始化代码其实编译时都已“移到”上边的static{...}中了。因此:类的初始化是要执行JVM指令的。与上边“2)中b)准备”中的“对类中的static数据成员分配空间,并初始化成它们的默认值”是不同的。 谁能告诉我一个DJ java decompiler的下载地址? socket编程的问题。 有段关于回调代码的例子,本人菜鸟向大家讨教回调代码的用处是什么? 当前期日 加 5年 应该怎么算呢? java终的一个小问题 怎样实现这个小功能啊? 关于swing性能的问题 求教java中取图片尺寸的办法 Applet中包含Swing组件而不能正确绘画如何解决? 哪位大虾用过JBulider4?进来看看 各位帮忙解决! button事件处理,急~
大致是:
一、类的装载
大致有:
1)将类的代码从源(硬盘、网络、内存中的字节数组等等)装载入内存,创建该类在内存中的表示映像。若该类有父类且没有装入,则还要装入父类,以及父类的父类
2)连接。大致有:
a)验证类字节码(如:结构上正确否;以及其它强制性遵守的规则)。
b)准备。如:对类中的static数据成员分配空间,并初始化成它们的默认值(注:这个初始化不是指:类的初始化。初始化成它们的默认值不会执行任何JVM机器指令的)
c)解析。对运行时常量池中称号引用进行解析。(如:若引用到其它类或接口,则要进行一步装载这些类或接口)分为:数据成员解析、方法解析等。
d)访问控制处理。二、类初始化:哪些操作会引起类的初始化操作?(如果类还没有初始化)
大致有:
1)new 生成该类或子类的对象
2)读/写该类的static型数据成员
3)调用该类的static方法。
4)通过反射类中的方法,如:Constructor对象中的newInstance(...)方法。
5)JVM启动时自动装入的一些类(如:自动装载入java.io.Serializable接口)
static int si=20;
这样的static数据成员的初始化代码其实编译时都已“移到”上边的static{...}中了。因此:类的初始化是要执行JVM指令的。与上边“2)中b)准备”中的“对类中的static数据成员分配空间,并初始化成它们的默认值”是不同的。