反射的常用方法


public class ReflectPhone2 {

    public static void main(String[] args) throws Exception {
        //獲取字節碼文件
        Class<?> rName = Class.forName(全限定類名);
        
        /**
         * 獲取構造方法
         * 
         */
        //獲取___所有public的構造方法,
        //如果還要獲取所有的構造方法用getDeclaredConstructors()方法
        Constructor<?>[] constructors = rName.getConstructors();
        //獲取___指定的構造方法,這獲取的是無參構造方法,
        //要獲取有參的請在行參列表上寫上(數據類型.class,數據類型.class);
        Constructor<?> constructor = rName.getConstructor();
        //調用___無參構造方法
        Object newInstance = constructor.newInstance();
        
        /**
         * 獲取方法
         * 
         */
        //獲取___類中所有的public修飾的方法,其中包括父類的方法。
        //如果還要獲取所有的方法用getDeclaredMethods()方法
        Method[] methods = rName.getMethods();
        //獲取___指定的方法,這獲取的是無參方法,
        //要獲取有參的請在行參列表上寫上(指定的方法名,數據類型1.class,數據類型2.class);
        Method method = rName.getMethod(方法名);
        //調用___非static修飾的方法需要invoke(對象,實參1,實參2),
        //有static修飾的方法需要invoke(null,實參1,實參2)。
        //我這調用的非static修飾方法沒有參數就只需一個對象
        method.invoke(newInstance);
        /**
         * 獲取字段
         * 
         */
        //獲取___類中的public字段。如果還要獲取所有的字段用getDeclaredFields()方法
        Field[] fields = rName.getFields();
        //獲取___指定的字段。
        Field field = rName.getDeclaredField(指定的字段名);
        //設置___指定的字段,非static修飾,set(對象,值);有static修飾,set(null,值)
        field.set(newInstance,5.2);
        //調用___指定字段的值,非static修飾,get(對象);有static修飾,get(null)
        Object object = field.get(newInstance);
        System.out.println("指定字段的值=="+object);
        
        /**
         * 破壞包裝declaredField.setAccessible(boolean)破壞封裝,可以調用私有成員
         * true:破環
         * false:默認值,不破壞
         */
        Field field2 = rName.getDeclaredField(私有化的字段名);
        //破壞封裝,不讓字段私有化
        field2.setAccessible(true);
        //設置字段的值
        field2.set(newInstance,值);
        //調用設置后的字段值,並打印
        Object object2 = field2.get(newInstance);
        System.out.println("破壞封裝==="+object2);
        
        //獲取全限定類名
        String name = rName.getName();
        System.out.println("全限定類名: "+name);
        
        //獲取類名簡寫
        String simpleName = rName.getSimpleName();
        System.out.println("類名簡寫: "+simpleName);
    }
}

 


免責聲明!

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



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