反射 API基本代碼測試

ReflectBean.java

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 +
                '}';
    }
}
Test.java
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());
        }


    }

}
相關文章
相關標籤/搜索