樂字節Java反射之三:方法、數組、類加載器和類的生命週期

本文承接上一篇:樂字節Java發射之二:實例化對象、接口與父類、修飾符和屬性java

繼續講述Java反射之三:方法、數組、類加載器c++

1、方法

獲取全部方法(包括父類或接口),使用Method便可。
圖片描述segmentfault

public static void test() throws Exception {
        Class<?> clz = Class.forName("com.shsxt.ref.simple.User ");
        //獲取屬性
System.out.println("===============本類方法===============");
        // 取得所有公共方法
        Method[] methods =clz.getMethods();
        for(Method m:methods){
            //一、權限 
            int mod=m.getModifiers();
            System.out.print(Modifier.toString(mod)+" ");
            //二、返回類型
            Class<?> returnType=m.getReturnType();
            System.out.print(returnType.getName()+" ");
            //三、名字
            String name =m.getName();
            System.out.print(name +"(");
            //四、參數
            Class<?>[] para=m.getParameterTypes();
            for(int i=0;i<para.length;i++){                
                Class<?> p =para[i];
                System.out.print(p.getName() +" arg"+i);
                if(i!=para.length-1){
                    System.out.print(",");
                }
            }
            //異常
            Class<?>[] exce=m.getExceptionTypes();
            if(exce.length>0){
                System.out.print(") throws ");
                for(int k=0;k<exce.length;++k){
                    System.out.print(exce[k].getName()+" ");
                    if(k<exce.length-1){
                        System.out.print(",");
                    }
                }
            }else{
                System.out.print(")");
            }
            System.out.println();
        }         
    }

2、 數組

操做數組須要藉助Array類。數組

//一、建立數組
        Object obj =Array.newInstance(int.class, 5);
        //二、獲取大小
        if(obj.getClass().isArray()){  //三、判斷是否爲數組
            System.out.println(Array.getLength(obj));
            //四、設置值
            Array.set(obj,0, 100);
            //五、獲取值
            System.out.println(Array.get(obj,0));
        }

3、 類加載器

在java中有三種類類加載器:spa

⑴Bootstrap ClassLoader 此加載器採用c++編寫,通常開發中不多見。code

⑵Extension ClassLoader 用來進行擴展類的加載,通常對應的是jrelibext目錄中的類對象

⑶AppClassLoader 加載classpath指定的類,是最經常使用的加載器。同時也是java中默認的加載器。 瞭解便可。blog

public static void main(String[] args) throws Exception {
         System.out.println("類加載器  "+ClassLoader.class.getClassLoader().getClass().getName());
    }

圖片描述

4、類的生命週期

在一個類編譯完成以後,下一步就須要開始使用類,若是要使用一個類,確定離不開JVM。在程序執行中JVM經過裝載,連接,初始化這3個步驟完成。接口

類的裝載是經過類加載器完成的,加載器將.class文件的二進制文件裝入JVM的方法區,而且在堆區建立描述這個類的java.lang.Class對象。用來封裝數據。 可是同一個類只會被類裝載器裝載一次。生命週期

連接就是把二進制數據組裝爲能夠運行的狀態。連接分爲校驗,準備,解析這3個階段

一、校驗通常用來確認此二進制文件是否適合當前的JVM(版本),

二、準備就是爲靜態成員分配內存空間。並設置默認值

三、解析指的是轉換常量池中的代碼做爲直接引用的過程,直到全部的符號引用均可以被運行程序使用(創建完整的對應關係)

完成以後,類型也就完成了初始化,初始化以後類的對象就能夠正常使用了,直到一個對象再也不使用以後,將被垃圾回收。釋放空間。當沒有任何引用指向Class對象時就會被卸載,結束類的生命週期。

樂字節原創,歡迎繼續關注 樂字節

相關文章
相關標籤/搜索