课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
类是程序员在学习java编程开发语言的时候需要重点掌握的一个编程知识点,下面我们就通过案例分析来了解一下,java编程类的应用基础知识分享。
类的生命周期
类的加载
查找并加载字节码
连接
确定类与类之间的关系:
验证
正确性校验
准备
static静态变量分配内存,赋初始化默认值
在准备阶段,会把num=0,之后再将0修改为10
在准备阶段,JVM中只有类,没有对象
解析
把类中的符号引用,转为直接引用
在解析阶段,JVM就可以将全类名映射成实际的内存地址,就用内存地址代替全类名
初始化
给静态变量赋予正确的值。
显式赋值
使用:对象的初始化时、对象的垃圾回收,对象的销毁
卸载
JVM结束类生命周期的时机:
-正常结束
-异常结束/错误
-System.exit();
-操作系统异常
其中,加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的"开始"(仅仅指的是开始,而非执行或者结束,因为这些阶段通常是互相交叉着混合进行。(这里是引自深入理解Java虚拟机(2版),这里还是有点不大理解为什么要互相交叉着混合进行的)。
我们注意到在类的初始化阶段,对类的静态变量进行显式赋值。
什么时候能够触发类的初始化呢?
对于初始化阶段虚拟机是严格规定了如下几种情况,如果类未初始化会对类进行初始化。(言下之意就是说类只会初始化一次)
创建类的实例对应字节码中的new指令
访问类的静态变量(除常量【被final修饰的静态变量】,常量在编译期被确定),对应的字节码指令为getstatic
访问类的静态方法invokestatic
反射
当初始化一个类时,发现其父类还未初始化,则先触发父类的初始化
虚拟机启动时,定义了main方法的那个类先初始化.
(这里我还有个小问题,JVM咋知道类有没有被初始化呢?是通过什么来判定类有没有初始化呢?)
既然类只会初始化一次,也就意味着静态变量只被显式的初始化一次。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。