歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java反射研究

Java反射研究

日期:2017/3/1 10:37:45   编辑:Linux編程

java.lang.reflect包

Constructor、Field、Method的父類是AccessibleObject;


一、獲得Class對象


Class<?> c = Class.forName("classname"); 拋出ClassNotFoundException


二、獲得實現接口


Class<?> inters[] = c.getInterfaces();

for(int i=0;i<inters.length;i++){

System.out.print(inters[i].getName()+" "); //getName()方法為取得接口名稱;

}


三、獲得父類


Class<?> superClass = c.getSuperclass(); //獲得父類

String name = superClass.getName(); //獲得父類名稱


四、取得構造方法


Constructor cons[] = c.getConstructors(); //獲得公開的構造方法

Constructor dcons[] = c.getDeclaredConstructors(); //獲得全部構造方法

String modifier = Modifier.toString(cons[i].getModifiers()); //獲得訪問權限

String name = cons[i].getName(); //獲得構造方法名稱

Class<?> params[] = cons[i].getParameterTypes(); //獲得參數類型對象


五、獲得Method


Method ms[] = c.getMethods(); //返回公共的全部方法,包括繼承方法

Method dms[] = c.getDeclaredMethods(); //返回本類全部方法,不包括繼承的方法

Class<?> rt = ms[i].getReturnType();

Class<?>params[] = ms[i].getParameterTypes();

String name = ms[i].getName();

String modifier = Modifier.toString(ms[i].getModifiers());

Class<?>ex[] = ms[i].getExceptionTypes(); //獲得異常

String name = ex[i].getName(); //獲得異常名稱


六、獲得Field


Field fs[] = c.getFields(); //獲得公共屬性,包括繼承屬性

Field dfs[] = c.getDeclaredFields(); // 獲得本類全部屬性

Class<?> type = fs[i].getType(); //獲得屬性的類型對象

String name = fs[i].getName(); //獲得屬性的名稱

String modifier = Modifier.toString(fs[i].getModifiers());


七、通過反射創建一個對象


Class<?> c = Class.forName("Person");

Person p = (Person)c.newInstance();


八、Constructor創建對象


Class c = Class.forName("Person");
Constructor<?> cons[] = c.getConstructors();
Person p = (Person)cons[0].newInstance("xiazdong",15);

Copyright © Linux教程網 All Rights Reserved