`

毕业设计-代码部分

阅读更多
研究JAVA CLASS LOADING已经好多天了。今天刚刚把代码初步整理了下。等待导师的指点。

MyClassLoader.class文件。
自定义CLASSLOADER类的实现:
/** *//**
 * classloader single
 * 
@author zhaojiucheng,liji
 * 
@version 1.2
 *  在1.1的基础上实现实现动态Reload
 
*/

package zhao;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;

/** *//**
 * 自定义类加载器
 
*/

public class MyClassLoader extends ClassLoader {

    
private static String MyClasspath = new String("");

    
private static ArrayList loadClassList = new ArrayList();

    
private static Hashtable loadClassHashTable = new Hashtable();

    
private static Hashtable loadClassTime = new Hashtable();

    
public MyClassLoader() {

    }


    
/** *//**
     * 构造自定义的加载器 参数1:路径名
     
*/

    
public MyClassLoader(String MyClasspath) {
        
if (!MyClasspath.endsWith("\\")) {
            MyClasspath 
= MyClasspath + "\\";
        }

        
this.MyClasspath = MyClasspath;
    }


    
/** *//**
     * 设置加载路径 参数1:路径名
     
*/

    
public void SetMyClasspath(String MyClasspath) {
        
if (!MyClasspath.endsWith("\\")) {
            MyClasspath 
= MyClasspath + "\\";
        }

        
this.MyClasspath = MyClasspath;
    }


    
/** *//**
     * 查找类并加载 参数1:文件名 被 loadClass() 调用
     
*/

    
public Class findClass(String name) {
        
byte[] classData = null;
        
try {
            classData 
= loadClassData(name);
        }
 catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println(
"自定义加载器正在加载: " + name + "");
        Class c 
= defineClass(name, classData, 0, classData.length);
        loadClassHashTable.put(name, c);
        System.out.println(
"加载" + name + "类成功。");
        
return c;
    }


    
/** *//**
     * 读取文件字节码 参数1:文件名 被 findClass() 调用
     
*/

    
private byte[] loadClassData(String name) throws IOException {
        String filePath 
= searchFile(MyClasspath, name + ".class");
        
if (!(filePath == null || filePath == "")) {
            System.out.println(
"已经找到" + filePath + ",开始读取字节码并加载。");
            FileInputStream inFile 
= new FileInputStream(filePath);
            
byte[] classData = new byte[inFile.available()];
            inFile.read(classData);
            inFile.close();
            loadClassTime.put(name, 
new File(filePath).lastModified());
            
return classData;
        }
 else {
            filePath 
= searchFile(MyClasspath, name + ".java");
            
if (!(filePath == null || filePath == "")) {
                System.out.println(
"已经找到" + filePath + "并开始编译");
                Runtime.getRuntime().exec(
"javac " + filePath);
                
try {
                    Thread.sleep(
1000);
                }
 catch (InterruptedException e) {
                    e.printStackTrace();
                }

                
return loadClassData(name);
            }
 else {
                System.out.println(
"未找到类文件,读取字节码失败!");
                
return null;
            }

        }

    }


    
/** *//**
     * 加载类 参数1:字节码数组 参数2:类名
     
*/

    
public Class loadClass(byte[] classData, String className)
            
throws ClassNotFoundException {
        System.out.println(
"自定义加载器正在加载: " + className + "");
        Class c 
= defineClass(className, classData, 0, classData.length);
        loadClassHashTable.put(className, c);
        System.out.println(
"加载" + className + "类成功。");
        
return c;
    }


    
/** *//**
     * 加载类 参数1:类名 类名从当前文件系统中查找指定的Class文件
     
*/

    
public Class loadClass(String name) throws ClassNotFoundException {
        
return loadClass(name, false);
    }


    
/** *//**
     * 加载类 参数1:类名 参数2:是否分析这个类
     
*/

    
protected Class loadClass(String name, boolean resolve)
            
throws ClassNotFoundException {
        
byte[] classData = null;
        Class temp 
= null;
        
try {
            temp 
=
分享到:
评论

相关推荐

    毕业设计-广告机-代码

    【毕业设计-广告机-代码】是一个典型的嵌入式系统开发项目,主要集中在构建一个基于6410处理器的QT广告机系统。这个系统可能是为了展示各种广告、信息或者服务,利用QT作为用户界面框架,结合6410处理器的强大性能,...

    毕业设计-源码Java基于SSM网上试衣间设计

    【标题】"毕业设计-源码Java基于SSM网上试衣间设计"是一个关于使用Java技术栈实现的在线试衣间应用的项目。SSM框架指的是Spring、Spring MVC和MyBatis这三种技术的组合,它们是Java Web开发中常用的三大组件。 ...

    Java毕业设计-基于springboot开发的企业oa管理系统源代码+演示视频

    Java毕业设计-基于springboot开发的企业oa管理系统源代码+演示视频,传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,员工...

    计算机毕业设计-网上订餐系统-论文-源码.zip

    《基于Java JSP的网上订餐系统:毕业设计与实现》 在当今信息化社会,网上订餐系统已经成为了人们日常生活中的重要组成部分。本项目“计算机毕业设计-网上订餐系统”是一个采用Java JSP技术开发的实用软件,旨在...

    Java毕业设计-基于springboot开发的厨艺交流平台设计与实现代码-毕业论文(附毕设源代码).rar

    “Java毕业设计-基于Spring Boot开发的厨艺交流平台设计与实现代码-毕业论文(附毕设源代码).rar”是一份涵盖了厨艺交流平台完整设计与实现的毕业设计资源包。这份资源不仅提供了详尽的毕业论文,还附带了完整的源...

    Java语言毕业设计---资产管理系统

    【Java语言毕业设计---资产管理系统】是一个基于JSP技术实现的项目,主要目的是为用户提供一套完整的资产管理解决方案。在本文中,我们将深入探讨该系统的核心技术和关键功能,以及它如何适用于毕业设计。 首先,...

    毕业设计-网页程序(源码)

    这个压缩包文件“毕业设计-网页程序(源码)”包含了一个基于单片机的数字温度计设计的网站源代码。这个项目分为多个组件,包括前端界面和后端功能,旨在展示一个完整的交互式温度监测系统。以下是这些文件的主要...

    Java毕业设计-基于springboot开发的作业管理系统-毕业论文(附毕设源代码).rar

    总的来说,《Java毕业设计-基于Spring Boot开发的作业管理系统-毕业论文(附毕设源代码).rar》是一份集理论与实践于一体的优秀毕业设计资源,无论是对于即将进行毕业设计的学生,还是对于希望了解Spring Boot框架...

    Java毕业设计-基于springboot开发的毕业设计系统开发-毕业论文(附毕设源代码).rar

    完整的毕业设计系统源代码:这部分是资源包的核心,包含了基于Spring Boot框架开发的毕业设计系统的完整源代码。这些代码结构清晰、逻辑严谨,不仅可以直接运行演示系统功能,还可以作为学生进行二次开发的起点。 ...

    Java毕业设计-基于springboot开发的Java家政服务平台设计与实现-毕业论文(附毕设源代码).rar

    “Java毕业设计-基于springboot开发的Java家政服务平台设计与实现-毕业论文(附毕设源代码).rar”是一份全面而详尽的毕业设计资源包,它涵盖了基于Spring Boot框架开发的家政服务平台的设计思路、实现过程以及相应...

    毕业设计-商城

    【标题】"毕业设计-商城"是一个典型的电子商务项目,它涵盖了网上购物系统的基本功能和架构。这个项目可能是针对计算机科学或相关专业学生的毕业设计任务,旨在让学生实践并掌握Web开发的相关技术。 【描述】"毕业...

    毕业设计-aspnet代码生成器v

    【标题】"毕业设计-aspnet代码生成器v"是一个基于.NET框架的开发工具,主要用于帮助开发者快速生成ASP.NET应用程序的代码。这个工具的核心功能是自动化代码编写过程,减轻了开发人员的手动编码工作,提高了开发效率...

    毕业设计&课设--毕业设计-学生毕业设计选题系统.zip

    【描述】中同样提到了“毕业设计&课设--毕业设计-学生毕业设计选题系统”,虽然没有提供更多的细节,但可以推测这可能是一个完整的项目,包含了需求分析、系统设计、代码实现、测试和文档等各个阶段的工作成果。...

    Java毕业设计-基于springboot开发的web音乐网站-毕业论文(附毕设源代码).rar

    而在源代码部分,更是亮点纷呈。该项目采用Spring Boot框架,结合前端技术,实现了一个功能完善的音乐网站。用户可以在线浏览音乐信息、试听歌曲、创建歌单等,同时后台管理功能也一应俱全,方便管理员对音乐资源和...

    计算机专业毕业设计源代码

    【计算机专业毕业设计源代码】通常是一个综合性的项目,涵盖了软件开发的多个方面,包括需求分析、系统设计、编程实现、测试与维护等步骤。在这个毕业设计中,前后端的代码都包含在内,这意味着它可能是一个完整的...

    毕业设计----网上商城

    【毕业设计——网上商城】是一套完整的毕业设计项目,涵盖了从系统开发到论文撰写的所有环节。这个项目旨在帮助学生在毕业阶段展示他们在IT领域的技能和理解,特别关注于Web应用程序的开发。它包括了实际的项目代码...

    毕业设计&课设--毕业设计-学生信息管理系统.zip

    描述部分进一步确认了这是一个面向毕业设计或课程设计的项目,可能由计算机科学或相关专业学生完成。毕业设计是高等教育中的一项重要环节,目的是让学生将所学理论知识与实际项目开发相结合,提升问题解决和软件工程...

    毕业设计全套-源代码+论文+答辩PPT+外文翻译

    在毕业设计中,源代码是实现网上购物系统的核心部分,包括数据库连接、业务逻辑和界面交互等代码。 6. **论文**:毕业论文是对毕业设计的理论阐述和实践经验总结,一般包含问题背景、设计目标、系统架构、实现技术...

    计算机毕业设计-ASP+ACCESS网上答疑管理系统毕业设计(源代码+LW).zip

    标题中的“计算机毕业设计-ASP+ACCESS网上答疑管理系统毕业设计(源代码+LW)”表明这是一个基于ASP(Active Server Pages)技术与ACCESS数据库构建的网上答疑管理系统的毕业设计项目。这个系统可能旨在为用户提供在线...

    Java毕业设计-基于springboot开发的社团管理系统-毕业论文(附毕设源代码).rar

    “Java毕业设计-基于springboot开发的社团管理系统-毕业论文(附毕设源代码).rar”是一个集理论与实践于一体的综合性资源包。此资源包不仅提供了基于Spring Boot框架开发的社团管理系统的完整源代码,还附带了相关...

Global site tag (gtag.js) - Google Analytics