类的生命周期回顾篇

一、JAVA虚拟机和JAVA程序的生命周期

  JAVA虚拟机的生命周期和JAVA程序的生命周期一致,当我们在命令行中敲入java命令运行java程序时,java虚拟机进程启动,程序运行,当程序终止时,则JAVA虚拟机的生命也结束。

  二、类的生命周期

  1、加载:将.class文件的二进制数据放到内存方法区中,并在堆区中创建一个Class对象,这个Class对象封装了方法区的数据结构,用户能通过Class对象访问到方法区中。

  2、连接

  (1)验证:验证.class文件是否是通过JAVA程序编译出来的,因为有可能这个.class文件是黑客特意制造出来的。

  (2)准备:为类中的静态变量分配空间,并初始化为默认值。

  (3)解析:把类的符号引用变为直接引用。

  3.初始化:为静态变量和静态块赋予值。

  JAVA程序对于类的使用方式:

  (1)主动使用。

  (2)被动使用。

  这里注意:

  JAVA虚拟机对于加载和连接的时间节点是很宽松的,没有严格规定,可以提前加载也可以;但是对于初始化,JAVA虚拟机规定当某个类被主动使用时才能初始化。

  我们把3个步骤细讲一下:

  1、类的加载:类是通过类加载器进行加载。

  类加载的来源:

  (1)文件系统中的class文件

  (2)jar包

  (3)网络中下载。

  类加载目的地:内存。

  类加载器分类:

  (1)根类加载器:没有父类,加载java.lang.*。

  (2)扩展类加载器:父类是根类加载器,用于加载jre\lib\ext的jar包。

  (3)系统类加载器:父类是扩展类加载器,用于加载classpath的jar包。Class scl = Class.getSystemClassLoader();

 (4)自定义加载器:自定义加载,通常父类是系统类加载器。

  注意:通过类虚拟机自带的(1)(2)(3)加载器是JAVA虚拟机创建的,而他们加载的类,他的生命周期是虚拟机的生命周期,因为始终被加载器锁引用。

  2、类的解析

  将符号引用转换成直接引用。比如:

  A函数调用了B函数,原本只是符号引用即标明引用了B函数,直接引用是将符号改成指针指向B函数。

  3、类的初始化

  规则:

  (1)初始化的静态变量都是运行时变量,即不能在编译时就能判断值是多少。

  (2)初始化的顺序就是按照代码的顺序执行。

  (3)如果初始化子类时父类还没有被初始化,则先初始化父类。

  初始化时机:当遇到以下情况会进行初始化。

  (1)new创建实例、反射创建实例、clone创建实例、反序列化创建实例。

  (2)访问静态变量,即读和写。

  (3)调用静态方法。

  (4)启动类需要首先初始化。

  (5)Class.forName();

  注意:

  (1)当遇到编译时常量,则直接用数字替换,而不会导致类初始化。比如public static final int a= 3;这就是一个编译时常量。

  (2)当子类对象调用父类的静态变量或方法,则只对父类进行初始化。比如:Sub.a,其中a是父类的静态变量,则只对Base初始化。

  (3)当子类被初始化时,父类一定要先初始化;

  但是如果一个类实现了一个接口,当类被初始化时,不用初始化父接口。

  只有对这个接口进行访问时,才会对接口进行初始化。

  (4)loader.loadClass("....");只是对类的加载,而不是初始化。

  类加载过程采用“父亲委托机制”,即如果loader2的父类是loader1,loader2想要加载test类,则先会检查loader1是否能够加载test类,如果能,则通过父类加载。

  运行时包的概念:包名相同,类加载器相同。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-12-27 23:29:03

类的生命周期回顾篇的相关文章

Android Service类与生命周期详细介绍

Android  Service类与生命周期 Service是Android四大组件与Activity最相似的组件,都代表可执行的程序,区别在于Service一直在后台运行且没有用户界面. 1.Service的类图和生命周期 先来看看Service的类图: 接下来看看Service的生命周期: 2.开发Service (1)开发Service需要两步: 第1步:定义子类,继承Service 第2步:在AndroidManifest.xml文件中配置Service (2)创建Service pub

Hibernate中相关接口实现类的生命周期

问题描述 今天面试被问到:Hibernate中SessionFactory和Session以及Transaction的生命周期,哪位高手能帮忙解答下··谢谢了· 问题补充:aabcc 写道 解决方案 我一般不使用spring来声明事务但是很明显的,当你声明某些方法的事务模式后,SPRING会在你执行的方法环绕着 begin和commit 还有 rollback举个例,如果你 Service方法里面的session是交给spring管理的,那spring会在你service方法开始执行时 open

Webkit中HTML5 Video的实现分析 (三) - MediaPlayer & MediaPlayerPrivate的生命周期

明确主要类的生命周期有助于更好理解Webkit中视频的工作流程.下图展示了类间的引用关系. 如HTMLVideoElement与一个MediaPlayer对应,MediaPlayer与MediaPlayerPrivate一一对应,它们都是一个组合关系,当所有者自身被析构时,会自动释放引用的实例.这个过程都是使用OwnPtr智能指针来实现的.   OwnPtr赋值操作的代码:        OwnPtr& operator=(std::nullptr_t) { clear(); return *t

基础总结篇之一:Activity生命周期[转]

from:http://blog.csdn.net/liuhe688/article/details/6733407 基础总结篇之一:Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓. 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一

android基础总结篇之一:Activity生命周期_Android

近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实Android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activi

android基础总结篇之一:Activity生命周期

近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实Android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activi

ASP.NET AJAX客户端生命周期分析(理论篇)

一.引言 微软的ASP.NET AJAX框架,作为一个相对比较完善的AJAX框架,有许多方面值得我们作深入研究.本文中,我们将结合一个具体的例子试图探究ASP.NET AJAX框架的客户端生命周期过程. [注]阅读本文最好要结合"ASP.NET应用程序生命周期概述"和"ASP.NET页面生命周期概述"两篇文章共同学习. 二.ASP.NET AJAX客户端生命周期原理 因为ASP.NET AJAX框架在开发思路上极大地借鉴了ASP.NET 2.0的开发技术,而且将会被

2000条你应知的WPF小姿势 基础篇&lt;22-27 WPF生命周期, 基础类等&gt;

原文:2000条你应知的WPF小姿势 基础篇<22-27 WPF生命周期, 基础类等> 端午长假在家陪着女朋友, 幸福感满满,生活对于一只饱经忧患的程序猿来说也是非常重要的,也就暂时没有更新博客.休假结束,回归奋斗的日子了,开始继续更新WPF系列. 在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C#  和 2,000 Things You Should Kn

秋色园QBlog技术原理解析:Module之页面基类-生命周期流程(六)

文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL 4:  秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序 5:  秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍