zoukankan      html  css  js  c++  java
  • JAVA_Reflection1

    package com.qf.reflection1;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    class Student {
        private String name;
        private int age;
    
        public String getName() {
            return name;
        }
    
        private void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public Student(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        public Student() {
            super();
        }
    
    }
    
    public class Test {
    
        public static void main(String[] args) {
    
            try {
                // 使用反射第一步 得到某个类的Class对象
                Class<Student> clazz1 = Student.class;
                Class<?> clazz2 = Class.forName("com.qf.reflection1.Student");
                Student student = new Student();
                Class<?> clazz3 = student.getClass();
    
                System.out.println("访问类所有属性");
                // clazz1.getDeclaredField("age");// 根据属性名 得到属性值 私有的也能得到
                // clazz1.getField("name");// 只能得到有访问权限的指定属性
                // clazz1.getFields();//得到有访问权限的所有属性
                Field fields[] = clazz1.getDeclaredFields();
                for (Field field : fields) {
                    System.out.println(field);
                }
    
                // 通过反射创建Student对象
                // 1,得到无参构造方法
                Constructor<Student> constructor = clazz1.getConstructor();
                // 2,创建对象
                Student stu = constructor.newInstance();
                // 等价于 Student stu = new Student();
    
                // 调用setName
                // 1,得到setName()
                Method method = clazz1.getDeclaredMethod("setName", new Class[] { String.class });
                // 私有方法需要设置访问权限
                method.setAccessible(true);
                // 2,通过之前的student对象调用setName表示的方法
                method.invoke(stu, new Object[] { "尼古拉斯赵四" });
    
                // 1,得到getName()
                Method getName = clazz1.getDeclaredMethod("getName", new Class[] {});
                // 2,通过之前的student对象调用getName表示的方法
                Object object = getName.invoke(stu, new Object[] {});
                System.out.println(object);
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }
  • 相关阅读:
    OllyUni.dll
    系统修改利器XueTr
    dubbo+zipkin调用链监控(二)
    Kafka Manager
    简易RPC框架-SPI
    Spring Cache扩展:注解失效时间+主动刷新缓存(二)
    从头开始搭建一个Spring boot+ActiveMQ高可用分布式环境
    简易RPC框架-熔断降级机制
    简易RPC框架-代理
    转:一篇讲线上优化查 CPU的脚本
  • 原文地址:https://www.cnblogs.com/fangg/p/5723034.html
Copyright © 2011-2022 走看看