java的新特性反射機制應用及操作示例詳解
前言
說起發(fā)射,先說正射是什么,我們代碼中通過User user = new User();
代碼創(chuàng)建一個對象,并調用User類的成員變量或方法,這種我們通過Class信息獲取class實例,稱之為正射,這種代碼編譯器編譯時便知道他會生成一個user對象。
如果我們在寫代碼時不知道我們要操作的對象類型,他可能是User類型,也可能是House類型,而User類型和Clazz類型有沒有繼承關系,只知道要調用他的getId()方法,那又該怎么調用對象的方法呢?
反射
對于反射而言,我們獲得了一個對象的實例,并且知道了這個對象的類型,那么我們便可以對他進行一切操作。
這是由于JVM為每一個加載的class都創(chuàng)建了一個class實例,并保存了實例的所有信息,包括類型,父類,方法,屬性等等,這使得我們可以獲取class實例的所有信息。
這種通過class實例獲取class信息的方法稱為反射
獲取class又3種方法
通過一個class的靜態(tài)變量class獲取
Class clazz = User.class;
通過完整包路徑獲取
Class clazz = Class.forName("xiaoqiangZzz.busticket;");
通過實例獲取
Object object = getObject(); Class clazz = object.getClass();
獲取到class后,我們也可以通過class創(chuàng)建實例對象
Object object = clazz.newInstance();
Object object = clazz.newInstance();
獲取屬性
Field getField(name):
根據字段名獲取某個public的field(包括父類)Field getDeclaredField(name):
根據字段名獲取當前類的某個field(不包括父類)Field[] getFields():
獲取所有public的field(包括父類)Field[] getDeclaredFields():
獲取當前類的所有field(不包括父類)
public void getId(Object object) throws IllegalAccessException { Class clazz = object.getClass(); Field field = clazz.getField("age"); field.setAccessible(true); System.out.println(field.get(object)); field.setAccessible(false); }
類似的,我們可以獲取方法并調用
Method getMethod(name, Class...):
獲取某個public的Method(包括父類)Method getDeclaredMethod(name, Class...):
獲取當前類的某個Method(不包括父類)Method[] getMethods():
獲取所有public的Method(包括父類)Method[] getDeclaredMethods():
獲取當前類的所有Method(不包括父類)
public void getMethod(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class clazz = object.getClass(); Method method = clazz.getMethod("getId"); method.invoke(object); }
反射應用
制作一個通用的數據庫表導出方法
public void wirte(Object[] objects, Class classN) throws IllegalAccessException { Sheet sheet = new Sheet(); Field[] fields = classN.getDeclaredFields(); for (int i = 1; i < objects.length; i++) { Row row = sheet.createRow(i); for (Field field : fields) { field.setAccessible(true); // 寫入單元格 ........... field.setAccessible(false); } }
注解獲取類
以上就是java的新特性--反射的詳細內容,更多關于java的新特性--反射的資料請關注腳本之家其它相關文章!