java loadclass_类加载器classloader-java简析

本篇文章来简析一下 classloader 在 Java 中的应用。

现在一般一个应用程序开发会包含很多很多的类, Java 程序启动时并不是一次性将所有的类全部加载到内存中进行运行的,而是先加载部分的类到 JVM 中,然后等 JVM 需要用到其他的类时再加载进去,这样的好处就是节约内存,提高了效率。

在 Java 中类加载器就是 ClassLoader , ClassLoader 的具体作用就是将 class 文件加载到 jvm 虚拟机中去,程序就可以正确运行了。

1,Class 再认识

我们平常写的 Java 文件的格式是 xxx.java 文件格式的,这个格式并不是 JVM 执行的格式, JVM 执行的是 .class 格式的文件,这就需要将 .java 的格式文件转为 .class 的格式,这就是编译过程。命令是:

javac HelloWorld.java

通过 javac 命令即可在当前目录下面生成 .class 文件,这个文件就是 JVM 能够执行的文件格式。

AAffA0nNPuCLAAAAAElFTkSuQmCC

接着通过 java 命令即可运行这个文件。

java HelloWorld

AAffA0nNPuCLAAAAAElFTkSuQmCC

结果输出 “Hello Java World !”

以上便是一个完整的 Java 文件运行过程,先经过编译将 .java 文件转为 .class 格式以便 JVM能够执行。接下来我们来详细分析。

2, Java 类加载器

2.1,ClassLoader 分类

每个 ClassLoader 对象都是一个 java.lang.ClassLoader 的实例。每个Class对象都被这些 ClassLoader 对象所加载,通过继承java.lang.ClassLoader 可以扩展出自定义 ClassLoader,并使用这些自定义的 ClassLoader 对类进行加载。

package java.lang;

public abstract class ClassLoader {

public Class loadClass(String name);

protected Class defineClass(byte[] b);

public URL getResource(String name);

public Enumeration getResources(String name);

public ClassLoader getParent();

Class> findClass(String name)

//...

}

1,loadClass

它接受一个全类名,然后返回一个 Class 类型的实例。

2,defineClass

方法接受一组字节,然后将其具体化为一个 Class 类型实例,它一般从磁盘上加载一个文件,然后将文件的字节传递给 JVM ,通过 JVM ( native 方法)对于 Class 的定义,将其具体化,实例化为一个Class 类型实例。

3,getParent

返回其parent ClassLoader

我们通过实际demo来测试一下。

package demo;

public class Test {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值