package com.xiaojian.basics.reflect;
/**
* 使用反射的測試類
*/
public class ReflectBean {
// field
public String name;
private int age;
protected char gender;
// constructor
public ReflectBean() {
this.name = "無參";
this.age = 1;
this.gender = '男';
}
public ReflectBean(String name,Integer age){
this.name = name;
this.age = age;
}
// method
protected String getInfo(){
String info = "這個" + this.gender + "人的名字是" + this.name ;
return info;
}
private int getAge(){
return this.age;
}
@Override
public String toString() {
return "ReflectBean{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
package com.xiaojian.basics.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 反射
*/
public class Test {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
Class clazz = Class.forName("com.xiaojian.basics.reflect.ReflectBean");
// getFields()獲取屬性:只能獲取public訪問權限的
Field[] fields = clazz.getFields();
// getMethods()獲取全部顯性方法:只能獲取public訪問權限的
Method[] methods = clazz.getMethods();
// 獲取全部顯性構造器
Constructor[] constructors = clazz.getConstructors();
// 建立空構造函數對象
ReflectBean bean1 = (ReflectBean) clazz.newInstance();
System.out.println("***************無參構造函數***********************");
System.out.println(bean1.getInfo());
// 建立有參數構造函數
Constructor constructor = clazz.getConstructor(String.class,Integer.class);
ReflectBean bean2 = (ReflectBean)constructor.newInstance("小華",125);
System.out.println("***************有參構造函數***********************");
System.out.println(bean2.toString());
// 輸出全部顯性屬性名稱
System.out.println("***************屬性名稱***********************");
for(Field field : fields){
System.out.println(field.getName());
}
// 輸出全部顯性方法名稱
System.out.println("***************方法名稱************************");
for(Method method : methods){
System.out.println(method.getName());
}
System.out.println("///////////////////////////////////////////////////////////////////////////////////////////////// ");
// getDeclaredFields()獲取全部屬性
Field[] declaredFields = clazz.getDeclaredFields();
// getDeclaredMethods()獲取全部方法
Method[] decalredMethods = clazz.getDeclaredMethods();
// 輸出全部屬性名稱
System.out.println("***************全部屬性名稱***********************");
for(Field field : declaredFields){
System.out.println(field.getName());
}
// 輸出全部方法名稱
System.out.println("***************全部方法名稱************************");
for(Method method : decalredMethods){
System.out.println(method.getName());
}
}
}