美文网首页
26_类加载

26_类加载

作者: lww文 | 来源:发表于2020-10-16 17:55 被阅读0次

顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance() 方法就可以创建出该类的一个对象。

类的加载过程

=========类加载器:

========classloader

所有的类加载器 除了 根类加载器 之外 都得继承  classloader

classloader  有4个主要方法

1=== loadclass  2==:findcalss  3:==defineclass 4reloerclass

==========findClass

========defineClass

=====resolveClass

===========URLClassloader

demo1  加载磁盘类

1:创建Test 类

=================

public class Test {

    public Test (){

    System.out.println("666");

    }

}

=================

2:创建 测试类

============

public class MyClass {

public static void main(String[] args)throws  Exception {

File file=new File("e:/");

        URI uri = file.toURI();

        URL url = uri.toURL();  //  加载地址

        URLClassLoader urlClassLoader=new URLClassLoader(new URL[]{url});

        System.out.println("URLClassLoader父加载器"+urlClassLoader.getParent());

        Class aClass = urlClassLoader.loadClass("Test");

        aClass.newInstance();

    }

}

============

=====自定义类加载器

1:继承类加载器

2:  覆盖findClass方法

=================================

// 1 继承ClassLoader

//  2

public class MyClassloadextends ClassLoader {

private Stringdictory; //被加载类所在目录

    public MyClassload(String dictory) {// 默认加载器是系统类加载器

        this.dictory = dictory;

    }

public MyClassload(ClassLoader parent, String dictory) {

super(parent);

        this.dictory = dictory;

    }

@Override

    protected ClassfindClass(String name)throws ClassNotFoundException {

//    把类名转为目录

        String file =dictory + File.separator + name.replace(".", File.separator) +".class";

        try {

//      构建输入流

            InputStream ins =new FileInputStream(file);

//        构建输出流

            ByteArrayOutputStream baos =new ByteArrayOutputStream();

            byte[] bytes =new byte[1024];

            int len = -1;

            while ((len = ins.read(bytes)) != -1) {

baos.write(bytes, 0, len);

            }

byte data[]  = baos.toByteArray();//  读取到字节吗的二进制数据

            ins.close();

            baos.close();

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

        }catch ( Exception e) {

e.printStackTrace();

            throw  new  RuntimeException(e);

        }

}

public static void main(String[] args)throws  Exception {

MyClassload myClassload=new MyClassload("e:/");

        Class test = myClassload.loadClass("Test");

        test.newInstance();

    }

}

=================================

自定义网络类加载器

相关文章

  • 26_类加载

    顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚...

  • 2022.1.18(晴)

    今天慰问,下午雷。26_

  • 第一章 类加载过程

    要点 类加载过程 类加载器 一、类加载过程 1.类的加载过程 类的加载 .class文件过程分为:加载---->连...

  • 深入理解jvm类加载机制

    1.什么是类加载? 类加载机制一个很大的体系,包括类加载的时机,类加载器,类加载时机。 1.1类加载过程 加载器加...

  • java基础知识之java类加载器

    1. 什么是类加载器 类加载器就是用来加载类的东西!类加载器也是一个类:ClassLoader 类加载器可以被加载...

  • JVM类加载入门

    一 类加载顺序 class类加载-->验证-->准备--->解析--->初始化 class类加载:通过类加载器加载...

  • java类加载器及其原理

    java类加载器 : java中默认有三种类加载器:引导类加载器,扩展类加载器,系统类加载器(也叫应用类加载器) ...

  • 深入浅出“类加载器”

    内容概述 “类加载”介绍 “类加载器”介绍 深入“类加载器” 深入“父亲委托机制” 一,“类加载”介绍 “加载”是...

  • 《深入理解JVM虚拟机》读书笔记-类加载器&Java模块化系统

    类加载器 一.类加载器 1.1 类与类加载器 类加载器的定义: Java虚拟机设计团队有意把 类加载阶段中 的“ ...

  • 类加载机制(一)

    加载机制系列类加载机制(一)类加载机制(二)类加载机制(三) 类加载机制 1.JVM把class文件加载到内存,对...

网友评论

      本文标题:26_类加载

      本文链接:https://www.haomeiwen.com/subject/znxtmktx.html