博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈ClassLoader
阅读量:5994 次
发布时间:2019-06-20

本文共 2121 字,大约阅读时间需要 7 分钟。

classloader的作用到本质再到种类

ClassLoader在Java中有着非常重要的作用,它主要工作在Class装载的加载阶段,其主要作用是从系统外部获得Class二进制数据流。它是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过将Class文件里的二进制数据流装在进系统,然后交给Java虚拟机进行连接、初始化等操作。

  • BootStrapClassLoader:作用主要是加载核心库Java.*,通常这些核心类的Class被签名不能被替换掉。它是由JVM内核实现的,在HotSpot VM及目前主要的java虚拟机中是用C++实现的。有了它加载最核心的内容才会有后面的ClassLoader存在。

  • ExtClassLoader:Java编写,加载扩展库Javax.*。这个ClassLoader是用户可见的,是用来加载位于jre/lib/ext目录下的jar包。用户也可以将自定义的jar包放到这个目录下,通过这个ClassLoader去加载。

  • AppClassLoader:Java编写,加载程序所在目录。也是用户可见的ClassLoader。它是用来加载class path下的内容。

  • 自定义ClassLoader:Java编写,定制化加载。

    demo:

1 public class MyClassLoader extends ClassLoader { 2     private String path; 3     private String classLoaderName; 4  5     public MyClassLoader(String path, String classLoaderName) { 6         this.path = path; 7         this.classLoaderName = classLoaderName; 8     } 9 10     //用于寻找类文件11     @Override12     public Class findClass(String name) {13         byte[] b = loadClassData(name);14         return defineClass(name, b, 0, b.length);15     }16 17     //用于加载类文件18     private byte[] loadClassData(String name) {19         name = path + name + ".class";20         InputStream in = null;21         ByteArrayOutputStream out = null;22         try {23             in = new FileInputStream(new File(name));24             out = new ByteArrayOutputStream();25             int i = 0;26             while ((i = in.read()) != -1) {27                 out.write(i);28             }29         } catch (Exception e) {30             e.printStackTrace();31         } finally {32             try {33                 out.close();34                 in.close();35             } catch (Exception e) {36                 e.printStackTrace();37             }38         }39         return out.toByteArray();40     }41 }
1 public class ClassLoaderChecker {2     public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {3         MyClassLoader m = new MyClassLoader("路径", "classloader名");4         Class c = m.loadClass("类名");5         c.newInstance();6     }7 }

 

转载于:https://www.cnblogs.com/bce1100/p/10495161.html

你可能感兴趣的文章
找出Windows 2003识别不了的移动硬盘
查看>>
策略模式(Strategy)解析例子
查看>>
SpringMVC通过配置mvc:view-controller直接解析到视图页面
查看>>
paramiko监控 windows服务器 被监控服务器只需要安装openssh服务即可基于wmic完成大部分监控...
查看>>
VMware12下 桥接模式 静态IP配置
查看>>
postfix邮件系统
查看>>
iBatis2学习笔记:多对多映射(双向)
查看>>
书目片段
查看>>
Linux-HA开源软件Heartbeat(配置篇)
查看>>
Citrix 桌面及应用虚拟化系列之一:XenServer安装
查看>>
解决Ubuntu解压乱码
查看>>
AJAX 异步(JavaScript 和 XMLHTTP)
查看>>
Atom 备份神器 —— Sync Settings
查看>>
Java8-Synchronized-No.02
查看>>
Windows 8实用窍门系列:17.文件选择器 文件保存器 文件夹选择器
查看>>
AE92 SDK for Java 最小示例学习
查看>>
Linux 中 Nginx 重启关闭
查看>>
Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持...
查看>>
Hadoop MapReduce编程 API入门系列之挖掘气象数据版本3(九)
查看>>
Linux命令大全
查看>>