类的生命周期section14类的生命周期.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第14讲 类的生命周期 类的加载、连接与初始化 类的加载器 类的卸载器 回顾 什么是异常(Exception)? Java异常类 异常类的层次结构 Throwable 具有两个子类,它们是 Exception:处理用户程序应当捕获的异常情况 Error:Error 类的异常为内部低级别错误,因此在正常情况下不期望用户的程序捕获它们 ,由JVM抛出。 处理异常 多重 catch 块 一段代码可能会生成多个异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句 执行其中的一条 catch 语句之后,其他的 catch 语句将被忽略 使用多重 catch 语句时,异常子类一定要位于异常父类之前 throw语句 程序执行到throw语句时立即中止,不再执行它后面的语句; 在包含throw语句的try块后面寻找与其相匹配的catch子句来捕获抛出的异常; 如果找不到则向上一层程序抛出直到由JVM来处理。 throws语句 可抛出异常的方法 语法: type function_name() throws Exception1,…ExceptionN{ } 该方法只是提供潜在异常的信息,有可能不发生异常,抛出来的异常类对象必须属于throws子句中中所指定的异常类; 在该方法调用者处理抛出异常 用户自定义异常 自定义异常需要继承Exception 及其子类; 若要抛出自定义的异常对象,使用throw关键字; 要想抛出用户自定义异常,一定要将所调用的 方法定义为可抛出异常的方法。 重写抛出异常的方法 子类可以与超类方法抛出相同类型的异类; 子类可以抛出超类方法所抛出的异常的子类; 子类中的方法抛出的异常数目可以少于超类中 方法所抛出的异常数目,或者不需要抛出任何异常。 第14讲 类的生命周期 类的加载、连接与初始化 类的加载器 类的卸载器 Java虚拟机及程序的生命周期 Java虚拟机为java程序提供运行时的环境,其中一项重要的任务就是管理类和对象的生命周期 运行一个java程序就是启动一个java虚拟机进程 Java虚拟机进程从启动到终止的过程,称为java虚拟机的生命周期,在以下情况下,java虚拟机将结束生命周期 程序正常执行结束 程序在执行中因为出现异常或错误而异常终止 执行了System.exit()方法。 由于操作系统出现错误而导致Java虚拟机进程终止 类的加载、连接和初始化 类的生命周期的开始 类的加载 类的加载是指把类的.class文件中的二进制数据读入到内存中,把它存放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。  java虚拟机加载类的二进制数据的来源: 从本文文件系统中加载类的.class文件 从ZIP、JAR或其他类型的归档文件中提取.class文件 把一个java源文件动态编译为.class文件 ...... 类的验证 保证被加载的类有正确的内部结构,并且与其他类协调一致 类的验证主要包括以下内容: 类的文件结构检查; 语义检查; 字节码验证; 二进制兼容的验证。 类的准备 给类的静态变量分配内存,并初始化为默认值 类的解析 Java虚拟机会把类的二进制数据中的符号引用替换为直接引用。 如在Worker类中gotoWork()方法中引用Car类的run()方法 类的初始化 在静态变量的声明处进行初始化 在静态代码块中进行初始化 Java虚拟机初始化一个类的步骤: 假如这个类还没有被加载和连接,那就先进行加载和连接。 假如类存在直接的父类,并且这个父类还有被初始化,那就先初始化直接的父类。 假如类中存在初始化的语句,那就依次执行这些初始化语句。 例: 例: 类的初始化的时机 主动使用 创建类的实例 调用类的静态方法 访问某个类或接口的静态变量,或者对静态变量赋值。 调用java API中某些反射方法 初始化一个类的子类。 Java虚拟机启动时被标明为启动类的类。 类的初始化的时机 被动使用 对于final类型的静态变量,如果在编译时就能计算出变量的取值,那么这种变量被看做编译时常量。 对于final类型的静态变量,如果在编译时不能就计算出变量的取值,那么这种变量被看做是对类的主动使用会导致类的初始化。 当java虚拟机初始化一个类时,要求它的所有父类都已经被初始化,但是这条规则并不适用于接口: 在初始化一个类时,并不会先初始化它所实现的接口 在初始化一个接口时,并不会先初始化它的父接口 只有当程序访问的静态变量或静态方法的确在当前类或接口中定义时,才可看做是对类或接口的主动作用。 调用ClassLoader类的loadCl

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档