java獲取class的幾種方式


以獲取Hello.class為例

public class Hello {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("tes22t2");
        for (String arg : args)
        {
            System.out.println("hello proms:" + arg);
        }

    }
}

1.反射

public static void main(String[] args) throws Exception
    {
        args = new String[]{"Hello","java瘋狂講義w"};
        String progClass = args[0];
        String[] progArgs = new String[args.length-1];
        System.arraycopy(args , 1 , progArgs, 0 , progArgs.length);
//        URL[] urls = {new URL("file:")};
//        Class<?> clazz = (new URLClassLoader(urls)).loadClass(progClass);
        Class<?> clazz = Class.forName(progClass);
        // 獲取需要運行的類的主方法
        Method main = clazz.getMethod("main" , (new String[0]).getClass());
        Object[] argsArray = {progArgs};
        main.invoke(null,argsArray);
    }

2.URLClassLoader

URL[] urls = {new URL("file:")};
Class<?> clazz = (new URLClassLoader(urls)).loadClass(progClass);

3.loadClass

CompileClassLoader ccl = new CompileClassLoader();
		// 加載需要運行的類
		Class<?> clazz = ccl.loadClass(progClass);

4.覆寫findClass

參考

java8--類加載機制與反射(java瘋狂講義3復習筆記)  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM