反射reflect-02

package com.ics.day10_14;

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

public class ReflectDemo {
    
    public static void main(String[] args) {
        String path = "com.ics.day10_14.User";
        try {
            Class<?> cla = Class.forName(path);
            
            //调用User的无参构造方法实例化一个对象
            User user = (User) cla.newInstance();//已过时
            
            //使用有参构造器
            Constructor<User> cons = (Constructor<User>) cla.getDeclaredConstructor(String.class, int.class);
            User user2 = cons.newInstance("zhangsan",18);
            System.out.println(user2.getName()+"---------"+user2.getAge());
            
            //通过反射api调用成员方法
            Method method = cla.getDeclaredMethod("setName", String.class);
            method.invoke(user, "lisi");
            System.out.println(user.getName());
            
            //通过反射操作属性
            Field field = cla.getDeclaredField("age");
            field.setAccessible(true);
            field.set(user, 30);
            System.out.println(user.getName()+"---------"+field.get(user));
            
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }    
    }

}
原文地址:https://www.cnblogs.com/hsRick/p/11673261.html