关于jvm的三个类加载器以及jar包的生成

package com.cgm.invokeclass;

import java.lang.reflect.Method;
/*
* 关于动态代理的两个核心类
*   1.Proxy
*      用来创建给定接口的子类,在内存中动态创建  $proxy() 执行一次
*   2.InvicationHandler  执行句柄。。在执行时可以获取被代理类的反射。 执行多次,用户的每一次调用都会被这个句柄所拦截
*  
*   3.关于类加载器  有3 
*      1 BootStrapClassLoader 根类加载器 ----加载jdk下rt.jar
*      2 ExtClassloader java扩展类加载器---- jdk下  的  ext文件夹下了类
*      3 AppClassLoader----加载系统的类 我们自己写的类 Web_info下 class文件夹下的类
*       因为jdk的父类委托机制 任务由下往上 委托执行 下列代码证明
*       
*   如何用cmd给class打jar包 
*      如把包 com/cgm/ss/VBBB.class
*      copy到某个目录下  D:a目录----》
*       开cmd  到    D:\a\com>cd..
*         D:\a>.jar -vcf aa.jar com.*
*   
*/
public class ProxyDemo {
public static void main(String[] args) throws Exception {
ProxyDemo p=new ProxyDemo();
System.out.println(p.getClass().getClassLoader());
System.out.println(ProxyDemo.class.getClassLoader()); //和上面同一个内存地址 应该是 由AppClassLoader加载 
System.out.println(ProxyDemo.class.getClassLoader().getParent());//ExtClassLoader 父类
System.out.println(ProxyDemo.class.getClassLoader().getParent().getParent()); //返回null,跟类加载器不允许使用 
System.out.println(String.class.getClassLoader());  //取得根类加载器 因为String是jre下rt.jar的方法
}
   @Override
public String toString() {

return "你好朋友";
}
}

你可能感兴趣的:(类加载器)