zoukankan      html  css  js  c++  java
  • java类加载器-(1)

    package vmrun;
    
    import java.io.InputStream;
    
    public class ClassLoadTest {
    	public static void main(String [] args) throws Exception{
    		ClassLoader myLoader = new ClassLoader() {
    
    			@Override
    			public Class<?> loadClass(String name)
    					throws ClassNotFoundException {
    				try {
    					String filename = name.substring(name.lastIndexOf(".")+1)+".class";
    					InputStream is = getClass().getResourceAsStream(filename) ;
    					if (is== null){
    						return super.loadClass(name) ;
    					}
    					byte [] b= new byte[is.available()];
    					is.read(b) ;
    					return defineClass(name, b, 0,b.length);
    				} catch (Exception e) {
    					throw new ClassNotFoundException(name);
    				}
    			}
    			
    		};
    		
    		Object object= myLoader.loadClass("vmrun.InvokeDynamicTest").newInstance();
    		System.out.println(object.getClass()) ;
    		System.out.println(object instanceof vmrun.InvokeDynamicTest);
    	}
    }
    

     输出

    class vmrun.InvokeDynamicTest

    false

      这里我们得到的Class对象是CLassLoader可以识别的类,而InvokeDynamicTest是程序执行后可以识别的类,此时仅仅装载了InvokeDynamicTest的程序代码,还没有创建出其对象 ,接下来可以使用Class.newInsance()方法来调用InvokeDynamic类的构造方法,并返回一个真正的InvokeDynamicTest对象。

      但是我们不能直接去调用 InvokeDynamicTest的任何方法,只能通过反射去调用其方法。

    对比 学习

    DexClassLoader使用-(1)

  • 相关阅读:
    竞赛图和哈密顿回路
    Hall 定理
    Vim 和 Gdb 学习笔记
    AT4996 [AGC034F] RNG and XOR(FWT)
    UOJ310 黎明前的巧克力(fwt)
    AT5202 [AGC038E] Gachapon(min-max)
    AT2289 [ARC067D] Yakiniku Restaurants(水题)
    拉格朗日插值
    [CSP-SJX2019]散步(模拟)
    Leetcode547 朋友圈 图的DFS与unionFind算法
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4781538.html
Copyright © 2011-2022 走看看