java中类的加载

类加载器的作用:

java中源文件通过java编译器产生了字节码文件,而类加载器及时负责将字节码文件加载到内存中。并将这些静态数据转化成方法区中运行时数据结构。然后再堆中生成一个代表个类的class对象,即java.lang.class类对象。


类缓存:

标准的javaSE类加载器加载可以按照要求查找类,一旦某一个类被加载到类加载器中时,这个class对象会维持加载一段时间。然后由JVM中的垃圾回收机制回收。

 

引导类类加载器分类:引导类加载器、扩展类加载器、系统类加载器

 示例代码:

public class test02 {
    public static void main(String[] args) throws ClassNotFoundException {
        //获取系统类加载器
        ClassLoader c=ClassLoader.getSystemClassLoader();
        System.out.println(c);

        //获取系统类加载器父类--扩展类加载器
        ClassLoader parent = c.getParent();
        System.out.println(parent);

        //获取根类加载器
        ClassLoader parent1 = parent.getParent();
        System.out.println(parent1);
        
        //测试当前类是由哪个类加载器加载
        ClassLoader t = Class.forName("test02").getClassLoader();
        System.out.println(t);

    }


}

运行结果:

双亲委派机制

除了根类加载器之外,其他类都要有自己的父类加载器,从JDK1.2开始,类加载过程采用双亲委派机制,这种机制很好的保护了java程序的安全。

classloader和URLclassloader

      Classloader 

          是所以类加载器都需继承的父类,除根类加载器,它是一个抽象类,其中有许多方法。ClassLoader类使用委托模式来搜索类和资源。 ClassLoader的每个实例都有一个关联的父类加载器。 当请求查找类或资源时, ClassLoader实例将在尝试查找类或资源本身之前将类或资源的搜索委托给其父类加载器。 虚拟机的内置类加载器(称为“引导类加载器”)本身不具有父级,但可以作为ClassLoader实例的父级。

方法: 

1、loadclass:

2、findclass:

  • protected <?> findClass(String name) throws ClassNotFoundException
  • 查找具有指定的课程binary name 。 该方法应该被加载类的委托模型后面的类加载器实现覆盖,并且在检查所请求的类的父类加载器之后将被loadClass方法调用。 默认实现会抛出一个ClassNotFoundException 。

 3、defineclass:

4、resolveclass:

  • protected final void resolveClass(<?> c)
  • 链接指定的类。 这个(误导性的)方法可能被类加载器用来链接一个类。 如果c类已经被链接,那么这个方法只是返回。 否则,课程将按照The Java™ Language Specification的“执行”一章中的描述进行链接 。

URLclassloader

    在java.net包中,jdk提供了一个更加易用的加载器URLclassloader,它扩展了classloader,能够从网络或本地上指定位置加载类。我们可以使用该类做自定义加载器使用。

菜鸟本菜,如有帮助十分荣幸。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱打辅助的小可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值