JVM 加载类 ClassLoader 类方法
来源:互联网 发布:网络层的主要功能 编辑:程序博客网 时间:2024/06/06 12:32
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Field;
public class TestClassLoader extends ClassLoader {
// 存在文件的路径
private static final String DRIVE = "c:\\com\\budco\\bmp\\";
private static final String DRIVE1 = "com\\budco\\bmp\\";
private static final String FILETYPE = ".class";
@Override
public final Class<?> findClass(final String name) {
final byte[] data = loadClassData(name);
// final String classPath = ClassLoader.getSystemResource((DRIVE1 +
// name).replace('\\', '.')).getFile().substring(
// 1);
// 把你要加载类用'.'代替\\ 应该是包路径+类名 //(DRIVE1 + name).replace('\\', '.')==
// com.budco.bmp.HelloWorld
return defineClass((DRIVE1 + name).replace('\\', '.'), data, 0, data.length);
}
public byte[] loadClassData(final String name) {
// name = name.substring(0,name.lastIndexOf('.'));
FileInputStream fis = null;
byte[] data = null;
final byte buffer[] = new byte[1024];
try {
fis = new FileInputStream(new File(DRIVE + name + FILETYPE));
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = 0;
try {
while ((len = fis.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
data = baos.toByteArray();
System.out.println("-----------------|||||||||||||||||--------------");
// System.out.println(new String(data));
baos.close();
fis.close();
} catch (final IOException e) {
e.printStackTrace();
}
} catch (final FileNotFoundException e) {
e.printStackTrace();
}
return data;
}
/**
* @param args
*/
public static void main(final String[] args) throws Exception {
// TODO Auto-generated method stub
final TestClassLoader loader = new TestClassLoader();
final TestClassLoader loader2 = new TestClassLoader();
final Class<?> obj = loader.findClass("HelloWorld");
final Class<?> o = Class.forName("com.budco.bmp.HelloWorld");
final Field fs = o.getField("RS");
System.out.println("------------------------ooo==" + fs.get("RS"));
// final Class obj2 = loader2.loadClass("Test2", true);
final Object objclass = obj.newInstance();
System.out.println("==========1" + objclass.getClass());
System.out.println("==========2" + obj.getName());
System.out.println("==========3" + obj.getClassLoader());
System.out.println("----------------------4 " + obj.getCanonicalName());
final Field f1 = obj.getField("RS");
final String s = (String) f1.get("RS");
System.out.println("-------------------" + s);
// 只可以 获得public 域名称
final Field f2 = obj.getField("txt");
final String s2 = (String) f2.get("txt");
System.out.println("-------------------" + s2);
}
public final class gg {
}
}
///////////下面是测试的类HelloWorld.java 要这个类编译.class文件
package com.budco.bmp;
public class HelloWorld {
private String name = null;
private static final String DRIVE = "c:\\com\\budco\\bmp\\";
public final static String RS = "HAL";
public final static String txt = "TXT";
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
private String getMethodName() {
this.setName("ale");
System.out.println("-------------");
return "";
}
/**
* @param args
*/
public static void main(final String[] args) {
// TODO Auto-generated method stub
System.out.println("---------HelloWorld!----");
String path = "";
path = DRIVE.replace('\\', '.');
System.out.println(path);
}
}
- JVM 加载类 ClassLoader 类方法
- JVM ClassLoader类加载原理
- JVM类加载机制-ClassLoader
- jvm classloader 类加载器
- JVM ClassLoader类加载原理
- JVM类加载机制(ClassLoader)源码解析
- 【JVM学习系列】ClassLoader(类加载器)
- JVM ClassLoader (java虚拟机类加载器)
- JVM解读(二):JVM类加载器ClassLoader
- JVM装载类(ClassLoader)
- JVM类加载机制(ClassLoader)源码解析(1)
- JVM类加载机制(ClassLoader)源码解析(2)
- JVM类加载机制(ClassLoader)源码解析(3)
- JVM类加载机制浅析 (How ClassLoader load class file )
- JVM类加载-从ClassLoader源码看双亲委托模型
- JVM学习笔记5—类加载器(classloader)
- jvm 类加载机制(ClassLoader)学习总结1
- Classloader类加载器
- 注册环节的MD5加密--班级管理系统心得
- android开发文档之onTouch()
- 学习
- 锁 死锁 阻塞 Latch 等待 详解
- lua和c/c++互相调用实例分析
- JVM 加载类 ClassLoader 类方法
- ROS中Hokuyo_node使用
- JS之onkeypress,onkeydown,onkeyup区别
- Java 同步方式 (2) —— wait和notify/notifyall
- 从B树、B+树、B*树谈到R 树
- 银行卡非法复制 芯片IC卡何时受理
- quartz的使用(一)
- spring data mongodb的Converter问题
- linux下lvs配置说明