java--类加载器(一)
来源:互联网 发布:阿里云青岛服务器地址 编辑:程序博客网 时间:2024/06/06 12:21
Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap, ExtClassLoader, AppClassLoader 类加载器也是Java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这正是BootStrap。 Java虚拟机中的所有类装载器采用具有父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其指定一个父级类装载器对象或者默认采用系统类装载器为其父级类加载。
系统类加载器
import org.junit.Test;public class ClassLoaderDemo { @Test public void ThreeLoaders(){ ClassLoaderDemo cld=new ClassLoaderDemo(); Class c=cld.getClass(); //获得系统类加载器 ClassLoader AppClassLoader=c.getClassLoader(); System.out.println("ClassLoader:"+AppClassLoader);//ClassLoader:sun.misc.Launcher$AppClassLoader@593887c2 // ClassLoader extClassLoader=AppClassLoader.getParent(); System.out.println("AppClassLoader:"+extClassLoader);//AppClassLoader:sun.misc.Launcher$ExtClassLoader@e58ff51 //BootStrap加载器是最底层的,用C语言写的,不是java类,所以用java代码获取结果为空 ClassLoader BootStrap=extClassLoader.getParent(); System.out.println("BootStrap:"+BootStrap);//BootStrap:null }}
让ExtClassLoader加载我们的类
import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.IOException;public class MyClassLoader extends ClassLoader{ public Class findClass(String fileName,String className){ byte b[]=loadClassData(fileName); return defineClass(className, b, 0, b.length); } private byte[] loadClassData(String fileName) { try { FileInputStream fin=new FileInputStream(fileName); ByteArrayOutputStream baout=new ByteArrayOutputStream(); byte b[]=new byte[1024]; int len=0; while((len=fin.read(b))!=-1){ baout.write(b, 0, len); } return baout.toByteArray(); } catch (IOException e) { return null; } }}
0 0
- JAVA类加载器(一)
- Java类加载器(一)
- java--类加载器(一)
- 认识java的类加载器(一)
- Java之------类加载器(一)
- JAVA虚拟机--类加载机制(一)
- 多多吃红薯,好好学java--浅析类加载过程及类加载器(一)
- 类加载器(一)
- 深入理解Java类加载器(一):Java类加载原理解析
- 深入理解Java类加载器(一):Java类加载原理解析
- Android动态加载学习总结(一):类加载器
- Java中关于类加载器的一些事儿(一)
- JAVA从入门到基础(七) 一 类加载器
- JVM研究(一)Java类加载机制
- 初学Java的类加载与反射机制(一)
- 深入理解Java(一)类加载原理
- java反射Reflection(一)之的类加载器ClassLoader和Class类
- Java类加载器(一)——类加载器层次与模型
- windows7系统的java访问VM中的ubuntu下的redis
- javascript-黑白反斗棋选关模式
- Kafka集群安装
- Android自定义View
- Linux文件的三种时间属性
- java--类加载器(一)
- Android开发笔记之xutil问题
- synchornized reentrant lock
- CSS float 属性
- 咳咳 萌新一枚。。。。历练之路
- 如何在SecureCRT中给linux上传和下载文件
- android知识点总结
- 基于mybatis的动态条件查询
- opencv3.0程序在debug下可以运行,在release下运行报cv::exception错误问题