实 现JAVA 的 动 态 类 载 入 机 制

作 为 充 分 利 用JAVA 的 动 态 类 载 入 机 制 的 最 好 例 子, 带 有JAVA 扩 展 的Web 浏 览 器 根 据 请 求 从 网 络 或 本 地 文 件 系 统 中 动 态 加 载JAVA applet( 遵 循 一 定 规 则 的JAVA 小 应 用 程 序 类), 然 后 在 本 地 系 统 中 执 行 它, 大 大 增 强 了 主 页 的 功 能。

---- 其 实,JAVA 本 身 就 是 一 种 极 具 动 态 性 的 语 言。 类 似Windows 的 动 态 链 接 库(DLL),JAVA 应 用 程 序 总 是 被 编 译 成 若 干 个 单 独 的class 文 件, 程 序 执 行 时 根 据 需 要 由JAVA 虚 拟 机 动 态 载 入 相 应 的 类。 这 种 机 制 使 编 写 动 态 的 分 布 式 应 用 程 序 成 为 可 能: 我 们 可 以 在 客 户 端 编 写 自 己 的 类 载 入 器, 而 真 正 执 行 的 程 序 却 存 放 在 本 地、 局 域 网 或 世 界 另 一 端 的 主 机 上。 下 面 将 介 绍 如 何 在 自 己 的 应 用 程 序 中 实 现JAVA 的 动 态 类 载 入 机 制。

与 动 态 类 载 入 有 关 的 系 统 类
---- 为 支 持 动 态 类 载 入 机 制, 在 系 统 类 组JAVA.lang 中 提 供 了 两 个 类:Class 类 和ClassLoader 类。

---- 1、 类JAVA.lang.Class。 在JAVA 虚 拟 机 中, 每 一 个 类 或 接 口 都 是 由Class 类 来 操 纵 的, 它 不 能 被 显 式 的 实 例 化, 必 须 用 其 他 方 法 来 获 取Class 类 的 对 象。 动 态 类 载 入 机 制 的 关 键 一 步 在 于 如 何 获 得 指 定 类 的Class 类 型 的 对 象。 相 关 方 法 主 要 有:

---- public static Class forName(String className)

---- 这 是 一 个 静 态 方 法, 它 获 取 指 定 名 字 的 类 的Class 类 型 对 象, 类 名 可 以 是 象“sun.applet.Applet” 这 样 的 字 符 串, 但 不 能 带 有 路 径 或 网 络 地 址 等 信 息。 这 是 从 本 地 系 统 中 动 态 载 入 类 的 最 方 便 的 办 法。

---- public Object newInstance()

---- 这 是 最 重 要 的 一 个 方 法, 它 建 立 由Class 类 型 对 象 描 述 的 指 定 类 的 实 例。

---- 下 面 是 一 个 用forName() 和newInstance() 方 法 实 现 动 态 类 载 入 的 代 码,share 类 包 含 一 个 接 口, 详 细 内 容 将 在 第 三 部 分 中 解 释。

try{
//根据类名建立Class类型的对象。

时间: 2024-10-03 15:34:35

实 现JAVA 的 动 态 类 载 入 机 制的相关文章

java 利用java反射机制动态加载类的简单实现_java

如下所示: ////////////////// Load.java package org.bromon.reflect; import java.util.ArrayList; import java.util.List; public class Load implements Operator { @Override public List<?> act(List<?> params) { // TODO Auto-generated method stub List<

举例讲解Java的内部类与类的加载器_java

内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加载后,Inner1没有加载,所以这个 静态变量j 无法立即使用,报错 final int z = 0; /*static void say1() { }*/ void say2() { } } //Inner2 在A加载好后就可以使用了 static class Inner2 { int k = 0

java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

1. File类 File 路径问题: 上下级文件夹之间使用分隔符分开: 在Windows中分隔符为'\' ,在Unix/Linux中分隔符为'/' 跨平台分隔符: 专业的做法是使用File.separatorChar,这个值会根据系统得到的相应的分隔符. 例:new File("c:"+File.separatorChar+"a.txt"); 注意,如果是使用"\" ,则需要进行转义,写为"\\"才可以     绝对路径与相

java的md5加密类(zt)

加密 java的md5加密类 MD5算法是将数据进行不可逆加密的算法有较好的安全性,在国内如寿信的安全支付平台就采用此算法. 源代码如下/************************************************MD5 算法的Java BeanLast Modified:10,Mar,2001*************************************************/ import java.lang.reflect.*; /************

JAVA类库的提前加载

在JAVA运行的时加载jar包类库 要是有相同的包路径,相同的类名字出现,那么JVM是否 会报告错误呢? 当然不会! JVM只会加载最早的出现的CLASS 首先JVM会加载 自己默认的包 然后加载 EXT目录下面的所有JAR 再到 classpath 那么 现在有2个 JAR 分别是 kj021320.jar summer.jar 里面都有包路径cn.isto 同样有 类Jcrack.class 那么 JVM就会看哪个 类先加载到VM中就用哪个!后面读进来的 如果路径名字一样 就会丢弃! 想到以

成员变量-如何让JAVA不自动回收某个类中的变量?

问题描述 如何让JAVA不自动回收某个类中的变量? 我的一个web应用中 初始化的时候会给一个类中的静态成员变量赋值,然后隔一段时间会改变成员变量中的值,这样java会自动回收吗?如果长时间不改变成员变量的值会给我回收掉吗?如果回收的话有什么办法可以不让他回收? 解决方案 静态类本身不会回收,但是如果你的程序运行在容器中(比如web程序),而容器本身会回收,这种情况相当于关闭了你的程序.那么当然这些变量全部都没有了. 你有两个办法,一个是根据容器的约定,阻止它回收.比如说容器规定,10分钟没有用

java中基于TaskEngine类封装实现定时任务

主要包括如下几个类:   文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 作者: javaboy2012 Email:yanek@163.com qq:    1046011462       1. 核心工具类: TaskEngine   package com.yanek.task; import java.util.*; import java.util.Lin

java代码-java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的?

问题描述 java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的? class Demo03 { public static void main(String[] args) { A.show(); } } class A { //构造方法 A(){ System.out.println("构造方法执行"); System.out.println(b); System.out.println(c); } static A a=new A(); sta

请教什么是双态类?能否举例将单态类改写为双态类?

问题描述 请教什么是双态类?能否举例将单态类改写为双态类?双态类我没听说过,跟多态性有什么关系?请高手举例将单态类改写为双态类? 解决方案 解决方案二:双态?没听说过!解决方案三:完全没听过解决方案四:单态双态都没听说过确定是java的?多态倒是略有耳闻面向对象的都有解决方案五:新特性??我知道有个单例,多态.单态双态没听说过