美文网首页
Java反射--MonkeyKing

Java反射--MonkeyKing

作者: 爱思考的小百科 | 来源:发表于2018-12-16 22:05 被阅读0次
  1. 获取类
    Class<?> perClazz = Class.forName("reflect.Person");
    System.out.println("perClazz: " + perClazz);

    Class<?> perClazz1 = Person.class;
    System.out.println("perClazz1: " + perClazz1);

    Person per = new Person();
    Class<?> perClazz3 = per.getClass();
    System.out.println("perClazz3: " + perClazz3);
  1. 获取类中的参数
    //获取自己以及父类的public参数
    Field[] fields = clazz.getFields();
    for (Field f : fields) {
        System.out.println(f);
    }
    //获取自己的所有参数
    Field[] fieldsDeclared = clazz.getDeclaredFields();
    for (Field f : fieldsDeclared) {
        System.out.println(f);
    }
  1. 获取类中的方法
    // 本类和父类中的public的方法(包括public/private/protect 返回类型 函数全名)
    Method[] methods = perClazz.getMethods();
    for (Method m : methods) {
        System.out.println(m);
    }
    //获取自己所有的方法
    Method[] methods = clazz.getDeclaredMethods();
    for (Method m : methods) {
        System.out.println(m);
    }
  1. 获取构造函数
    /*
     * 包装类和基本属性不一样
     * 
     * 传入参数类型
     * 传入参数,用构造函数实例化对象
     * 
     * */
    Constructor constructor = clazz.getConstructor(int.class);
    Object o = constructor.newInstance(1234);
    Person per = (Person)o;
  1. 实例化对选
    //创建一个对象
    Person p = (Person) clazz.newInstance();
    p.interfaceMethod();
    /*
     * 包装类和基本属性不一样
     * 
     * 传入参数类型 传入参数,用构造函数实例化对象
     * 
     */
     //没有传入参数就写null
    Constructor constructor = clazz.getConstructor(int.class);
    Object o = constructor.newInstance(1234);
    Person per = (Person) o;
    System.out.println(per.getId());
    //获取配置文件
    Properties prop = new Properties();
    prop.load(new FileReader("class.txt"));
    String classname = prop.getProperty("classname");
    String methodname = prop.getProperty("methodname");
    /*
     * classname=reflect.Student 
     * methodname=sayHi
     */
    Class<?> perClazz = Class.forName(classname);
    method = perClazz.getMethod(methodname);
    //用制定的对象执行该方法
    method.invoke(perClazz.newInstance());
  1. 万能get set方法

public class PropertyUtil {
    public static void setProperty(Object obj, String propertyName, Object value) throws Exception{
        Class clazz = obj.getClass();
        Field field = clazz.getDeclaredField(propertyName);
        field.setAccessible(true);
        field.set(obj, value);
    }
    
    public static Object getProperty(Object obj, String propertyName) throws Exception {
        Class clazz = obj.getClass();
        Field field = clazz.getDeclaredField(propertyName);
        field.setAccessible(true);
        Object o = field.get(obj);
        return o;
    }
}
//==================================================================
    执行方法
//==================================================================
    Person person = new Person();
    PropertyUtil.setProperty(person, "id", 222);
    System.out.println(person.getId());
    PropertyUtil.setProperty(person, "name", "mk");
    Object obj = PropertyUtil.getProperty(person, "name");
    System.out.println(obj);

  1. 测试
    ArrayList<Integer> list = new ArrayList<>();
    list.add(123);
    list.add(321);

    Class listClazz = list.getClass();
    method = listClazz.getMethod("add", Object.class);
    method.invoke(list, "lalala");
    System.out.println(list);

相关文章

  • Java反射--MonkeyKing

    获取类 获取类中的参数 获取类中的方法 获取构造函数 实例化对选 万能get set方法 测试

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • JAVA基础23种设计模式----简单工厂模式--MonkeyK

    JAVA基础23种设计模式----简单工厂模式--MonkeyKing 简单工厂模式属于类的创建模型模式,又叫静态...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • JAVA基础23种设计模式----工厂模式--MonkeyKin

    JAVA基础23种设计模式----工厂模式--MonkeyKing 工厂方法模式同样属于类的创建模式又被称为多台工...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

网友评论

      本文标题:Java反射--MonkeyKing

      本文链接:https://www.haomeiwen.com/subject/codmqqtx.html