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

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