2099年了,你知道什么是Java的类加载器嘛?
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的类加载器嘛?相关推荐
- java中的类加载器有,Java自定义的类加载器,java自定义加载,在java中类加载器有以...
Java自定义的类加载器,java自定义加载,在java中类加载器有以 在java中类加载器有以下几种java虚拟机自带的加载器 1)根类加载器(Bootstrap,c++实现)2)扩展类加载器(Ex ...
- OSGi 规范和框架 OSGi框架类加载机制 Java默认类加载器机制和OSGI类加载器机制比较
一.OSGi 规范 OSGi(Open Service Gateway Initiative) 技术是 Java 动态化模块化系统的一系列规范.OSGi 一方面指维护 OSGi 规范的 OSGi Al ...
- Java 自定义类加载器教程
文章目录 Java 自定义类加载器教程 loadClass findClass defineClass 函数调用过程 Java 自定义类加载器教程 除了在面试中遇到类的加载器的概率会高外,在实际的工作 ...
- java 扩展类加载器_java实现自定义类加载器
各类加载器虽然以父子相称,但是没有继承关系 (视频教程推荐:java课程) 点入ClassLoader的源码查看样例:* * class NetworkClassLoader extends Clas ...
- java自定义类加载器
import java.io.*;public class MyClassLoader extends ClassLoader{private String loaderName; //类加载器名称p ...
- java类二次加载_深入理解java之类加载器
一.类与类加载器 类加载器:实现加载阶段的第一步,通过一个类的全限定名来将这个类的二进制字节流加载进jvm. 类与类加载器:任意一个类唯一性都是由它本身和加载它的类加载器确定,两个类是否相等在它们是由 ...
- java 自定义类加载器_Java-JVM 自定义类加载器
一.sun.misc.Launcher (ExtClassLoader 与 AppClassLoader 的创建) publicLauncher() { Launcher.ExtClassLoader ...
- java 获取类加载器_java-如何从类加载器获取类路径?
更新:我下面的原始答案很不充分,因为我花了三年的时间开发FastClasspathScanner,并提交了大量关于某些类路径环境无法使用该库的错误报告. FastClasspathScanner现在可 ...
- java安全——类加载器+字节码校验+安全管理器与访问权限
[0]README 0.1)本文文字描述转自 core java volume 2,旨在学习 java安全 的相关知识: [1]类加载器 1)java 技术提供了以下3种确保安全的机制(mechani ...
最新文章
- Get Started with Apex Unit Tests
- 【转载】比特币入门教程
- Linux线程同步之条件变量
- 【NLP-词向量】从模型结构到损失函数详解word2vec
- 关于联合利华:我的第一次正式实习的单位!撒花!
- boost::unknown_exception用法的测试程序
- 然后是几点 c语言,2-2. 然后是几点
- Google是如何识别原创文章的,以及外链建设意见
- 对数字信号处理中各种频率以及分辨率的理解
- HCIE-Security Day4:安全策略和状态检测
- 对GridFS数据进行分片
- mysql 去除空格
- linux 两台linux服务器想共享一个磁盘分区
- JDK安装和环境变量配置(超详细图文)
- php13 质粒 cm erm 抗生素,PHP13 会话控制 - osc_c0g7cjrk的个人空间 - OSCHINA - 中文开源技术交流社区...
- [ActionScript 3] 【开源】D5Power RPG网页游戏开发套件
- 学生信息管理系统(头哥适用版)(c语言)
- HTML5网页设计基础——用户注册界面
- 查找算法【平衡二叉树】 - 平衡二叉树的创建
- git同步代码到远程github仓库
热门文章
- Java 单体服务开发指南
- Kernel pwn 入门 (3)
- 苏宁减持阿里巴巴股份;小蓝单车用户退款信息“失踪”;高通正式拒绝博通1300亿美元收购丨价值早报
- 为什么很多看起来不是很复杂的网站,需要大量顶尖高手来开发?
- 恒玄BES调试笔记-BES2500蓝牙相关参数设定
- 蓝牙耳机哪个牌子好?蓝牙耳机排行榜2022
- matlab 基金业绩归因,基金专题报告:基于净值和持仓的基金业绩归因方法研究...
- halcon开闭运算
- linux取证教程,Linux中的取证(Forensics in Linux)
- 深度学习算法--python实现用TensorFlow构建字符级RNN语言建模(源码+详细注释)