
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();
????????}
????}
}以上就是小編今天的分享了,希望可以幫助到大家。
