java reflect

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java reflect是什麼?讓我們一起來了解一下吧!

java reflect是反射機制,指在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。

 

java reflect

實現反射的方法:

一、獲得類的信息(獲得到的是類的全路徑信息)

獲取類的信息有三種方法:

1.使用class類的forName()方法獲取類的信息

2.使用實例的getClass()獲取類的信息

3.通過類名獲得類的信息

二、使用類的信息創建類

獲得類的信息之後,可以使用reflect(反射)包下面的Field和Method類獲得類的屬性和方法,並對屬性和方法進行操作。

獲得類的全路徑名以後可以通過使用Class類中的getDeclaredMethod(String name, Class

getDeclaredField(String name)方法如下:

public class ClassUtils {    /**     * 獲取屬性字段     * @param clazz 類     * @param fieldName 屬性名稱     * @throws Exception     */    public static void getDeclaredField(Class clazz, String fieldName) throws Exception{        System.out.println(clazz.getDeclaredField(fieldName));    }}public class ClassTest {    public static void main(String[] args) {        try {            Class clazz = Class.forName("reflectdemo.SuperHero");            //測試公有屬性            ClassUtils.getDeclaredField(clazz, "ADDRESS");            //測試私有屬性            ClassUtils.getDeclaredField(clazz, "name");        } catch (Exception e) {            e.printStackTrace();        }    }}

 getDeclaredFields()方法如下:

public class ClassUtils {    /**     * 遍歷clazz對象已有的成員變量     * @param clazz     */    public static void getDeclaredFields(Class clazz){        Field[] fields = clazz.getDeclaredFields();        for (Field field: fields) {            //如果要設置值,需要加入下面這句,反射對象在使用時不使用Java語言訪問檢查            //field.setAccessible(true);                        //直接打印Field            System.out.println(field);            //手動獲取變量類型和變量名稱            System.out.println(field.getType().getName() + " " +field.getName());            System.out.println("--------------------");        }    }}public class ClassTest {    public static void main(String[] args) {        try {            Class clazz = Class.forName("reflectdemo.SuperHero");            //遍歷成員變量            ClassUtils.getDeclaredFields(clazz);        } catch (Exception e) {            e.printStackTrace();        }    }}