java 实例化过程 和 程序加载.docx_第1页
java 实例化过程 和 程序加载.docx_第2页
java 实例化过程 和 程序加载.docx_第3页
java 实例化过程 和 程序加载.docx_第4页
java 实例化过程 和 程序加载.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java 实例化过程 和 程序加载收藏顺序:1:父类静态块2:子类静态块3:父类实体态块4:父类方法头 (constructor 中的this() ,call 另外一个constructor)5:父类构造方法体6:子类实体态块7:子类方法头8:子类构造方法体Example :package SCJP;class ParentC public String p_s = s; static String s_s = static_s; ParentC(int i) System.out.println(Before Parent_constructor + i); ParentC() this(0); System.out.println(Parent_constructor); public void pMethod() System.out.println(Parent_public_method); public static void sMethod() System.out.println(Parent_static_method); System.out.println(Parent_non_static_block); static System.out.println(Parent_static_block); public class InstanceOrderTest extends ParentC InstanceOrderTest() System.out.println(Child_constructor); public void pMethod() System.out.println(Child_public_method); System.out.println(Child_non_static_block); public static void sMethod() System.out.println(Child_static_method); static System.out.println(Child_static_block); /* * param args */ public static void main(String args) / TODO Auto-generated method stub new InstanceOrderTest(); output:Parent_static_blockChild_static_blockParent_non_static_blockBefore Parent_constructor 0Parent_constructorChild_non_static_blockChild_constructor=静态库、动态连接库程 序编制一般需经编辑、编译、连接、加载和运行几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在连接步骤中,连 接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会 有多份冗余拷贝。为了克服这个缺点可以采用动态连接库。这个时候连接器仅仅是在可执行文件中打上标志,说明需要使用哪些动态连接库;当运行程序时,加载器根据这些标志把所需的动态连接库加载到内存。另 外在当前的编程环境中,一般都提供方法让程序在运行的时候把某个特定的动态连接库加载并运行,也可以将其卸载(例如Win32的LoadLibrary ()&FreeLibrary()和Posix的dlopen()&dlclose())。这个功能被广泛地用于在程序运行时刻更新某些 功能模块或者是程序外观。What is ClassLoader?与普通程序不同的是,Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader。JVM 本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,Bootstrap ClassLoader是用本地代码实现的,它负责加载核心Java Class(即所有java.*开头的类)。另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由Bootstrap ClassLoader加载;其中Extension ClassLoader负责加载扩展的Java class(例如所有javax.*开头的类和存放在JRE的ext目录下的类),Application ClassLoader负责加载应用程序自身的类。When to load the class?什 么时候JVM会使用ClassLoader加载一个类呢?当你使用java去执行一个类,JVM使用Application ClassLoader加载这个类;然后如果类A引用了类B,不管是直接引用还是用Class.forName()引用,JVM就会找到加载类A的 ClassLoader,并用这个ClassLoader来加载类B。Why use your own ClassLoader?似乎JVM自身的ClassLoader已经足够了,为什么我们还需要创建自己的ClassLoader呢?因为JVM自带的ClassLoader只是懂得从本地文件系统加载标准的java class文件,如果编写你自己的ClassLoader,你可以做到:1)在执行非置信代码之前,自动验证数字签名2)动态地创建符合用户特定需要的定制化构建类3)从特定的场所取得java class,例如数据库中4) 等等事实上当使用Applet的时候,就用到了特定的ClassLoader,因为这时需要从网络上加载java class,并且要检查相关的安全信息。目前的应用服务器大都使用了ClassLoader技术,即使你不需要创建自己的ClassLoader,了解其原理也有助于更好地部署自己的应用。ClassLoader Tree & Delegation Model当 你决定创建你自己的ClassLoader时,需要继承java.lang.ClassLoader或者它的子类。在实例化每个ClassLoader对 象时,需要指定一个父对象;如果没有指定的话,系统自动指定ClassLoader.getSystemClassLoader()为父对象。如下图:在Java 1.2后,java class的加载采用所谓的委托模式(Delegation Modle),当调用一个ClassLoader.loadClass()加载一个类的时候,将遵循以下的步骤:1)检查这个类是否已经被加载进来了?2)如果还没有加载,调用父对象加载该类3)如果父对象无法加载,调用本对象的findClass()取得这个类。所以当创建自己的Class Loader时,只需要重载findClass()这个方法。Unloading? Reloading?当 一个java class被加载到JVM之后,它有没有可能被卸载呢?我们知道Win32有FreeLibrary()函数,Posix有dlclose()函数可以被 调用来卸载指定的动态连接库,但是Java并没有提供一个UnloadClass()的方法来卸载指定的类。在Java中,java class的卸载仅仅是一种对系统的优化,有助于减少应用对内存的占用。既然是一种优化方法,那么就完全是JVM自行决定如何实现,对Java开发人员来说是完全透明的。在什么时候一个java class/interface会被卸载呢?Sun公司的原话是 这么说的:class or interface may be unloaded if and only if its class loader is unreachable. Classes loaded by the bootstrap loader may not be unloaded.事实上我们关心的不是如何卸载类的,我们关心的是如何更新已经被加载了的类从而更新应用的功能。JSP则是一个非常典型的例子,如果一个JSP文件被更改了,应用服务器则需要把更改后的JSP重新编译,然后加载新生成的类来响应后继的请求。其 实一个已经加载的类是无法被更新的,如果你试图用同一个Clas

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论