JAVA反射的一些例子

關於JAVA反射的一些例子,可以看下





/通過類的名字的字符串表達形式,獲取到類這個對象。1
//類的完整名稱爲:所在包的包名+自己定義的名稱
Class cls = Class.forName("extension.Person");

//得到指定的包名
String packageName = cls.getPackage().getName();
System.out.println("得到包名:" + packageName);
//獲取其父類
Class superCls = cls.getSuperclass();
String superClsName = superCls.getName();
System.out.println("Person類的父類:" + superClsName);

//獲取其實現的構造方法
Constructor[] constructors = cls.getConstructors();
System.out.println("Person類實現的構造方法:" + Arrays.toString(constructors));
//獲取其成員方法
Method[] methods = cls.getMethods();
System.out.println("Person中的成員方法:" + Arrays.toString(methods));
//得到方法的返回類型
Class returnType = methods[1].getReturnType();
System.out.println("getName方法的返回類型:" + returnType);
//通過反射的類,實例化該類的對象
Person person = (Person) cls.newInstance();
Field nameField = cls.getDeclaredField("name");
//解除封裝,如果沒有這句話,則會拋出異常
nameField.setAccessible(true);
nameField.set(person, "小明");
//打印該屬性的值
System.out.println("Person類中Name屬性的值是:" + nameField.get(person));
//利用反射動態的調用方法
Method getNameMethod = cls.getDeclaredMethod("getName");
getNameMethod.setAccessible(true);
String name = (String) getNameMethod.invoke(person);
System.out.println("調用getName方法得到:" + name);
Method setSexMethod = cls.getDeclaredMethod("setSex", String.class);
setSexMethod.setAccessible(true);
setSexMethod.invoke(person, "男");

發佈了56 篇原創文章 · 獲贊 9 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章