网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.eclipse-SDK-3.0.1-win32.
.使用MIDP2.0开发游戏(4)改进的地.
.关于Java编程语言中的return语句.
.Java 5.0 多线程编程实.
.用JAAS 实现in Struts Web App(二.
.Pervasive Java.
.Eclipse快速上手指南 (1).
.JAVA几个常见错误简析(下).
.Java 实现连接sql server 2000(.
.JML起步--使用JML改进你的Java程.
.针对 .NET 开发人员的存储过程评.
.用Flash远程调用增强J2EE表示层.
.instanceof 运算符.
.利用Java语言实现数据报编程之单.
.如何轻松提高Java代码的性能.
.XML和Java:一个强大的组合.
.无线开发:如何使用kxml解析WAP.
.Spring MVC验证的配置步骤.
.新手宝典 J2EE专家起步图解.
.虚拟机监视器Xen和虚拟化技术(一.

扩展ClassLoader定制类装载器

发表日期:2008-1-5


    Java的ClassLoader与Package机制介绍了ClassLoader的委派机制,它是把装载的任务传递给上级的装载器的,依次类推,直到启动类装载器(没有上级类装载器)。假如启动类装载器能够装载这个类,那么它会首先装载。假如不能,则往下传递。其实这引出一个运行时包的概念。不同装载器装载的类,即使包名相同也不能互相访问。这样保证了核心类库不被破坏。

    本文将讲述如何扩展ClassLoader类实现一个自己的类装载器,每个Class对象都有一个引用指向装载他的ClassLoader,你可以通过public ClassLoader getClassLoader()方法得到它。为了创建自己的类装载器我们应该扩展ClassLoader类,这是一个抽象类。我们目的是从本地文件系统使用我们实现的类装载器装载一个类。我们创建一个FileClassLoader extends ClassLoader。我们需要覆盖ClassLoader中的
findClass(String name)方法,这个方法通过类的名字而得到一个Class对象。
    public Class findClass(String name)
    {
        byte[] data = loadClassData(name);
        return defineClass(name, data, 0, data.length);
    }
我们还应该提供一个方法loadClassData(String name),通过类的名称返回class文件的字节数组。然后使用ClassLoader提供的defineClass()方法我们就可以返回Class对象了。
    public byte[] loadClassData(String name)
    {
        FileInputStream fis = null;
        byte[] data = null;
        try
        {
            fis = new FileInputStream(new File(drive + name + fileType));
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int ch = 0;
            while ((ch = fis.read()) != -1)
            {
                baos.write(ch);
              
            }
            data = baos.toByteArray();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
       
        return data;
    }
这里我们是从D盘装载一个类。

     下面我们提供一个类public class MyApp{},类中没有定义任何方法和变量,下面我们编译MyApp.java得到MyApp.class,然后把文件放在D盘的根目录。为了证实MyApp.class是被我们定义的classloader装载的,我们在FileClassLoader的main()方法中打印出装载MyApp.class的类装载器的名称。
    public static void main(String[] args) throws Exception
    {
        FileClassLoader loader = new FileClassLoader();
        Class objClass = loader.loadClass("MyApp", true);


上一篇:Class文件详解 (1) 人气:609
下一篇:实现游戏开发中的屏幕滚动功能 人气:555
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐