java reflect是什么?讓我們一起來了解一下吧!
java reflect是反射機制,指在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
?
實現反射的方法:
一、獲得類的信息(獲得到的是類的全路徑信息)
獲取類的信息有三種方法:
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(); ????????} ????} }
以上就是小編今天的分享了,希望可以幫助到大家。