java反射機制的初步理解

定義及應用場景參考:https://www.cnblogs.com/whoislcj/p/6038511.html

 

簡單的使用:

package com.test;

import javax.rmi.CORBA.StubDelegate;
public class User {
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    String name;
    int age;
    String code;
    
    public User() {
        System.out.println("實例化一個User對象!");
    }
    
    @Override
    public String toString() {
        return "User [name"+name+",code="+code+",age="+age+"]";
    }
}
 

 

package com.test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {

    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InstantiationException {
        // TODO Auto-generated method stub
        User user = new User();
        //利用反射機制創建一個對象
        User newInstance = User.class.newInstance();
        System.out.println(newInstance);
        Class clazz = User.class;
        
        Field field = clazz.getDeclaredField("name");
        System.out.println("屬性名:"+field.getName());
        System.out.println("屬性類型:"+field.getType().getName());
        System.out.println("---------------------------------------");
        
        //獲取一個類中的所有屬性
        Field[] fields = clazz.getDeclaredFields();
        for(Field f:fields) {
            System.out.println("屬性名:"+f.getName());
            System.out.println("屬性類型:"+f.getType().getName());
            //給屬性賦值
            f.setAccessible(true);// 設置爲私有屬性可以訪問
            if(int.class == f.getType()) {//如果類型是int類型的
                f.set(newInstance,50);
            }else if(String.class == f.getType()) {
                f.set(newInstance, "蔡徐坤");
            }
        }
        System.out.println("========通過直接賦值後的結果==========");
        System.out.println(newInstance);
        
        //獲取得到賦值後的值
        System.out.println(user.getAge()+":"+user.getCode()+":"+user.getName());
        System.out.println("========獲取所有方法==========");
        
        // 獲取所有方法 不包括構造方法
        Method[] methods = clazz.getDeclaredMethods();
        for(Method m : methods) {
            String methodName = m.getName();// 參數名稱
            int parameterCount = m.getParameterCount();// 參數個數
            System.out.println("方法名字:" + methodName);
            System.out.println("方法參數個數:" + parameterCount);
            Class<?>[] parameterTypes = m.getParameterTypes();//參數類型
            //獲取每個方法的參數類型
            for(Class<?> class1:parameterTypes) {
                System.out.println("參數類型:"+class1.getName());
            }
            //獲取方法的返回值
            Class<?> returnType = m.getReturnType();
            System.out.println("方法的返回值爲:" + returnType.getName());
            System.out.println("-------------------");
        }

    }

}
具體使用參照:https://blog.csdn.net/qq_40896997/article/details/94483820

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章