Java的类加载器

作用

  • 编译器先把java文件编译成class字节码文件

  • ClassLoad会把字节码文件转换成jvm中的Class对象

  • jvm再把class对象转成实例对象

  • ClassLoad在java 中有着非常重要的作用,他主要工作是在Class装载的加载过程,他的主要作用是 从系统外部获取二进制数据流。它是java的核心组件,所有的class都是通过ClassLoad进行加载的,ClassLoad负责将class文件里的二进制流输入到系统中交给jvm进行连接,初始化操作。

分类

系统自带的类加载器

  • 启动类加载器(BootStrap) c++编写 加载核心库 java.*
  • 拓展类加载器 (Extension) java编写 加载拓展库 javax.*
  • 应用程序加载类(AppClassLoader)java编写 加载程序所在目录

用户自定义的类加载器

  • 自定义类加载器 java编写 定制化加载

编写ClassLoad

  • 我们先了解2个方法
  • 这个方法是找类的 若没有找到就会报一个找不到类的异常 ,我们再来看一个方法

  • 根据名称加载字节码对象返回class对象

  • 先写一个 java文件
public class Test {static {System.out.println("hello smile");}
}
  • 编译之后获取 class文件
  • javac 命令
  • 开始编写ClassLoad
public class MyClassLoader extends ClassLoader {private String path;private String classLoaderName;public MyClassLoader(String path, String classLoaderName) {this.path = path;this.classLoaderName = classLoaderName;}//用于寻找类文件@Overridepublic Class findClass(String name) {byte[] b = loadClassData(name);return defineClass(name, b, 0, b.length);}//用于加载类文件private byte[] loadClassData(String name) {name = path + name + ".class";InputStream in = null;ByteArrayOutputStream out = null;try {in = new FileInputStream(new File(name));out = new ByteArrayOutputStream();int i = 0;while ((i = in.read()) != -1) {out.write(i);}} catch (Exception e) {e.printStackTrace();} finally {try {out.close();in.close();} catch (Exception e) {e.printStackTrace();}}return out.toByteArray();}
}
public class ClassTest {public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {MyClassLoader test = new MyClassLoader("D:/", "myClassLoader");Class c = test.loadClass("Student");System.out.println(c.getClassLoader());c.newInstance();}
}

2099年了,你知道什么是Java的类加载器嘛?相关推荐

  1. java中的类加载器有,Java自定义的类加载器,java自定义加载,在java中类加载器有以...

    Java自定义的类加载器,java自定义加载,在java中类加载器有以 在java中类加载器有以下几种java虚拟机自带的加载器 1)根类加载器(Bootstrap,c++实现)2)扩展类加载器(Ex ...

  2. OSGi 规范和框架 OSGi框架类加载机制 Java默认类加载器机制和OSGI类加载器机制比较

    一.OSGi 规范 OSGi(Open Service Gateway Initiative) 技术是 Java 动态化模块化系统的一系列规范.OSGi 一方面指维护 OSGi 规范的 OSGi Al ...

  3. Java 自定义类加载器教程

    文章目录 Java 自定义类加载器教程 loadClass findClass defineClass 函数调用过程 Java 自定义类加载器教程 除了在面试中遇到类的加载器的概率会高外,在实际的工作 ...

  4. java 扩展类加载器_java实现自定义类加载器

    各类加载器虽然以父子相称,但是没有继承关系 (视频教程推荐:java课程) 点入ClassLoader的源码查看样例:* * class NetworkClassLoader extends Clas ...

  5. java自定义类加载器

    import java.io.*;public class MyClassLoader extends ClassLoader{private String loaderName; //类加载器名称p ...

  6. java类二次加载_深入理解java之类加载器

    一.类与类加载器 类加载器:实现加载阶段的第一步,通过一个类的全限定名来将这个类的二进制字节流加载进jvm. 类与类加载器:任意一个类唯一性都是由它本身和加载它的类加载器确定,两个类是否相等在它们是由 ...

  7. java 自定义类加载器_Java-JVM 自定义类加载器

    一.sun.misc.Launcher (ExtClassLoader 与 AppClassLoader 的创建) publicLauncher() { Launcher.ExtClassLoader ...

  8. java 获取类加载器_java-如何从类加载器获取类路径?

    更新:我下面的原始答案很不充分,因为我花了三年的时间开发FastClasspathScanner,并提交了大量关于某些类路径环境无法使用该库的错误报告. FastClasspathScanner现在可 ...

  9. java安全——类加载器+字节码校验+安全管理器与访问权限

    [0]README 0.1)本文文字描述转自 core java volume 2,旨在学习 java安全 的相关知识: [1]类加载器 1)java 技术提供了以下3种确保安全的机制(mechani ...

最新文章

  1. Get Started with Apex Unit Tests
  2. 【转载】比特币入门教程
  3. Linux线程同步之条件变量
  4. 【NLP-词向量】从模型结构到损失函数详解word2vec
  5. 关于联合利华:我的第一次正式实习的单位!撒花!
  6. boost::unknown_exception用法的测试程序
  7. 然后是几点 c语言,2-2. 然后是几点
  8. Google是如何识别原创文章的,以及外链建设意见
  9. 对数字信号处理中各种频率以及分辨率的理解
  10. HCIE-Security Day4:安全策略和状态检测
  11. 对GridFS数据进行分片
  12. mysql 去除空格
  13. linux 两台linux服务器想共享一个磁盘分区
  14. JDK安装和环境变量配置(超详细图文)
  15. php13 质粒 cm erm 抗生素,PHP13 会话控制 - osc_c0g7cjrk的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. [ActionScript 3] 【开源】D5Power RPG网页游戏开发套件
  17. 学生信息管理系统(头哥适用版)(c语言)
  18. HTML5网页设计基础——用户注册界面
  19. 查找算法【平衡二叉树】 - 平衡二叉树的创建
  20. git同步代码到远程github仓库

热门文章

  1. Java 单体服务开发指南
  2. Kernel pwn 入门 (3)
  3. 苏宁减持阿里巴巴股份;小蓝单车用户退款信息“失踪”;高通正式拒绝博通1300亿美元收购丨价值早报
  4. 为什么很多看起来不是很复杂的网站,需要大量顶尖高手来开发?
  5. 恒玄BES调试笔记-BES2500蓝牙相关参数设定
  6. 蓝牙耳机哪个牌子好?蓝牙耳机排行榜2022
  7. matlab 基金业绩归因,基金专题报告:基于净值和持仓的基金业绩归因方法研究...
  8. halcon开闭运算
  9. linux取证教程,Linux中的取证(Forensics in Linux)
  10. 深度学习算法--python实现用TensorFlow构建字符级RNN语言建模(源码+详细注释)