1、定义:

寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件。

2、种类:

BootstrapClassLoader:用C++编写的,装载jre中的核心类库;

ExtClassLoader:装载jre目录下的ext中的jar类;

AppClassLoader:装载ClassPath路径下的类.

UrlClassLoader:装载Url指定的类;

3、测试:

public class Test {

public static void main(String[] args) {

ClassLoader loader = Test.class.getClassLoader();

while (loader != null) {

System.out.println(loader.getClass().getName());

loader = loader.getParent();

}

System.out.println(loader);

}

}

输入结果:

sun.misc.Launcher$AppClassLoader

sun.misc.Launcher$ExtClassLoader

null

说明:

null:BootstrapClassLoader是用C++编写,而JVM设置ExtClassLoader的父加载器是null罢了;

4、一个自定义类加载器的例子:

package classloader;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

/**

*

* 一、ClassLoader加载类的顺序

* 1.调用 findLoadedClass(String) 来检查是否已经加载类。

* 2.在父类加载器上调用 loadClass 方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。

* 3.调用 findClass(String) 方法查找类。

* 二、实现自己的类加载器

* 1.获取类的class文件的字节数组

* 2.将字节数组转换为Class类的实例

*

*/

public class ClassLoaderTest {

public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {

//新建一个类加载器

MyClassLoader cl = new MyClassLoader("myClassLoader");

//加载类,得到Class对象

Class> clazz = cl.loadClass("classloader.Animal");

//得到类的实例

Animal animal=(Animal) clazz.newInstance();

animal.say();

}

}

class Animal{

public void say(){

System.out.println("hello world!");

}

}

class MyClassLoader extends ClassLoader {

//类加载器的名称

private String name;

//类存放的路径

private String path = "E:\\workspace\\Algorithm\\src";

MyClassLoader(String name) {

this.name = name;

}

MyClassLoader(ClassLoader parent, String name) {

super(parent);

this.name = name;

}

/**

* 重写findClass方法

*/

@Override

public Class> findClass(String name) {

byte[] data = loadClassData(name);

return this.defineClass(name, data, 0, data.length);

}

public byte[] loadClassData(String name) {

try {

name = name.replace(".", "//");

FileInputStream is = new FileInputStream(new File(path + name + ".class"));

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int b = 0;

while ((b = is.read()) != -1) {

baos.write(b);

}

return baos.toByteArray();

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

本代码来自:http://www.oschina.net

java类加载器分类_Java 类加载器的种类相关推荐

  1. java类加载器分类_Java类加载器特点的具体介绍

    Java类加载器一个我们经常使用的优秀语言,但是在我们使用的过程中有不少的问题需要我们解决.下面我们就详细的来看看相关问题的解决方法.想大家有所收获. Java类加载器的特性: 每个ClassLoad ...

  2. python 装饰器分类_Python 装饰器(Decorators) 超详细分类实例

    Python装饰器分类 Python 装饰器函数: 是指装饰器本身是函数风格的实现; 函数装饰器: 是指被装饰的目标对象是函数;(目标对象); 装饰器类 : 是指装饰器本身是类风格的实现; 类装饰器 ...

  3. java 类加载器 解密_JAVA类加载器总结整理

    一.What(是什么?) 1.概念 Java类加载器是Java运行时环境的一部分,负责动态加载Java类到JVM的内存空间中.每个Java类必须由某个类加载器装入到内存中.每一个类加载器都有一个父类加 ...

  4. java 类加载 双亲委派_Java类加载器和双亲委派机制

    前言 之前详细介绍了Java类的整个加载过程(类加载机制详解).虽然,篇幅较长,但是也不要被内容吓到了,其实每个阶段都可以用一句话来概括. 1)加载:查找并加载类的二进制字节流数据. 2)验证:保证被 ...

  5. java 类加载 双亲委派_java类加载器和双亲委派模型

    一. 类加载器 ClassLoader即常说的类加载器,其功能是用于从Class文件加载所需的类,主要场景用于热部署.代码热替换等场景. 系统提供3种的类加载器:Bootstrap ClassLoad ...

  6. java classloader详解_Java类加载器(ClassLoader)详解

    本文主要讲述Java ClassLoader的工作原理,这为后面将Android App代码热替换或者插件化升级做铺垫 一. 类加载器 ClassLoader即常说的类加载器,其功能是用于从Class ...

  7. java class加载_Java 类加载

    从一个诡异的问题说起 测试案例一: packageecut.classloader;public classSun {protected static int a = 100;protected st ...

  8. java log4j 热部署_JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)

    首先纠正一个误区: 热部署不是我们在Eclipse里面修改了代码不用重启就可以持续调试. 详情可以参考上一篇博文: 热部署和"Hot Code Replace"的区别    htt ...

  9. java记录类加载的个数_java类加载过程 - audience_1的个人空间 - OSCHINA - 中文开源技术交流社区...

    java类加载过程: 在我们代码中,一般就一个new的方法,就能够创建一个java的对象类,但在java虚拟机中 1:首先,我们需要判断该类是否已经在方法区中的常量池中有一个类的符号的引用存在,如果该 ...

最新文章

  1. Leetcode: Permutations II
  2. Java Spring Data Redis实战与配置参数详解 application.properties...
  3. 【数据结构与算法】之深入解析“Excel表列序号和表列名称”的求解思路与算法示例
  4. 一分钟明确 VS manifest 原理
  5. 【转】!C# 基础至集合-数组、List<T>、ArrayList、LinkedList、HashMap的一些区别
  6. Java自动切表_java_Mybatis自动创建表和更新表结构,最近有小伙伴问我mybatis有没有 - phpStudy...
  7. Web开发的未来:React、Falcor和ES6
  8. 如何进行多语言发布,做国际化开发
  9. 【转】C# 中@符号在字符串中的作用
  10. OpenCV绘制半透明效果的代码
  11. hash素数表(备用)
  12. 悦听player音乐播放器
  13. Chapter3-线性模型线性模型
  14. 【视觉高级篇】20 # 如何用WebGL绘制3D物体?
  15. 新手必看--test link使用步骤
  16. 硅谷最牛程序员,总是不经意间碾压众人
  17. 微信小程序使用canvas画图并保存到手机相册踩坑总结
  18. 淘宝刷信用教程曝光:“一钻”售价仅为250元
  19. 浙大第一愤青教授的质疑--教育究竟为谁服务
  20. java远程方法调用(RMI)

热门文章

  1. html转换jquery,将html字符串转化为jquery对象
  2. linux messages日志为空,自定义linux系统日志格式(messages,cron,ssh等日志格式)
  3. Jsp Servlet Mysql实现的Java Web在线商城项目源码
  4. linux malloc速度,性能 – memcpy()的速度受malloc()的不同方式的影响很大
  5. js判断数组中有没有指定元素
  6. bzoj 4006 管道连接 —— 斯坦纳树+状压DP
  7. apidoc @apiGroup兼容中文
  8. Asp.net SignalR
  9. 【AWS】 AWS Free Usage Tier
  10. 中国移动全球通寻宝第四期攻略