研究Java类加载机制
来源:互联网 发布:交互流程图软件 编辑:程序博客网 时间:2024/06/05 08:45
java.lang.Class
类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance()
方法就可以创建出该类的一个对象。实际的情况可能更加复杂,比如 Java 字节代码可能是通过工具动态生成的,也可能是通过网络下载的。A a = (A)Class.forName(“package.A”).newInstance();和 A a = new A;是等价的。
JAVA中获取Class对象有3种方式:
1.Class.forName()
2.Object.getClass()
3.类字面常量 xx.class
方法loadClass
Class loadClass(String name, boolean resolve);name参数指定了JVM需要的类的全名,如java.lang.Object;resolve参数告诉方法是否需要解析类。在准备执行类之前,应考虑类解析。并不总是需要解析。
方法defineClass
方法findSystemClass
findSystemClass方法从本地文件系统装入文件。它在本地文件系统中寻找类文件,如果存在,就使用defineClass将原始字节转换成Class对象,以将该文件转换成类。对于定制的ClassLoader,只有在尝试其它方法装入类之后,再使用findSystemClass。原因很简单:ClassLoader是负责执行装入类的特殊步骤,不是负责所有类。例如,即使ClassLoader从远程的Web站点装入了某些类,仍然需要在本地机器上装入大量的基本Java库。而这些类不是我们所关心的,所以要JVM以缺省方式从本地文件系统装入它们:
方法resolveClass
正如前面所提到的,可以不完全地(不带解析)装入类,也可以完全地(带解析)装入类。当编写我们自己的loadClass时,可以调用resolveClass,这取决于loadClass的resolve参数的值。
方法findLoadedClass
findLoadedClass充当一个缓存:当请求loadClass装入类时,它调用该方法来查看ClassLoader是否已装入这个类,这样可以避免重新装入已存在类所造成的麻烦。应首先调用该方法。
定制ClassLoader的作用
JVM已经有一个ClassLoader,那么我们还有必要再做一个吗?在一般情况下,没有必要,但在一些特定的时候还是有必要的。缺省的ClassLoader只知道如何从本地文件系统装入类文件,那么在什么情况下,可以用到定制的ClassLoader呢?简单举两个例子:
1)可以使用定制的ClassLoader从Web站点装入可执行内容,以执行远程代码。
2) 可以使用定制的ClassLoader装入加密的字节码,以保护我们的源代码。
如何运行定制的ClassLoader
要使用定制的ClassLoader,必须以特殊方式调用程序。不能直接运行该程序,如:% java Foo arg1 arg2; 而是应该写成:
% java
其中MyLoader就是我们定制的ClassLoader。
- 研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- Java类加载机制的深入研究
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- Java类加载机制的研究
- 深入研究Java类加载机制
- 深入研究Java类加载机制
- Windows 7安装.net,错误代码HRESULT 0xc8000222解决方法
- C#音乐播放器帮助类
- css做table
- LeetCode Distinct Subsequences
- Beetl 模板语言
- 研究Java类加载机制
- Oracle 权限设置
- 物理地址 虚拟地址 逻辑地址 线性地址
- JAVA大写金额转小写金额过程
- linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结 详细出处参考:http://www.jb51.net/LINUXjishu/43356.html
- ZOJ 3209 Treasure Map 解题报告(Dancing Link)
- OCP-1Z0-051 第54题
- 文字滚动效果
- Structure from motion学习笔记(一)