标签:Java 自定义 ClassLoader 获取 之类 println public 加载
简介:
在Java语言里面提供有一个系统的环境变量:CLASSPATH,这个环境变量的主要作用就是在JVM启动的时候进行类加载路径的定义,在JVM里面可以根据类加载器进行指定路径中类的加载(找到了类的加载器就找到了类的来源)
类加载器在加载之后的结果在程序中都是用字节(byte)来描述。
要想获得类的加载器要通过ClassLoader来获取,而要想获取ClassLoader就必须通过Class类(反射的根源)实现:
public ClassLoader getClassLoader();
当获取了ClassLoader之后,还可以继续获取其父类的ClassLoader类对象:
public final ClassLoader getParent();
类加载之后会保存到JVM的内存之中,而内存中的类要使用对象来描述,对象是通过Class类的反射来操作,而通过反射也可以获取ClassLoader对象
代码实现:
class Message{ } public class MAIN { public static void main(String[] args) { Class<? extends Message> messageClass = Message.class; System.out.println(messageClass.getClassLoader()); // 获取当前类加载器 System.out.println(messageClass.getClassLoader().getParent()); // 获取父类加载器 System.out.println(messageClass.getClassLoader().getParent().getParent()); // 获取父类的父类加载器;返回为空 } }
结果:
jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b jdk.internal.loader.ClassLoaders$PlatformClassLoader@776ec8df null
所有的类加载器都是由上向下执行的(系统类加载器是看不见的)
当获得了类加载的时候,就可以使用类加载来实现类的反射加载处理。
自定义加载器:
清楚了类加载器的结构之后就可以进行自定义的类加载器的使用,有一点需要记住的就是自定义类加载器是在所有系统类加载器的最后。
作用:
系统类中提供的类加载器都是根据CLASSPATH路径进行类加载的,而如果拥有了自定义的类加载器就可以由自己任意指定类的加载位置,比如从磁盘的某个位置或者某个服务器的某个位置上加载,可以灵活地改变加载位置以达到灵活开发的目的,加载后会得到一个字节数组,从而使用加载的类。
实现步骤:
1、将一个随便编写的程序类保存在磁盘上:
public class Message { public void send(){ System.out.println("【发送消息】www.baidu.com"); } }
未完待续。。。
标签:Java,自定义,ClassLoader,获取,之类,println,public,加载 来源: https://www.cnblogs.com/0099-ymsml/p/15964923.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。