• 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();
            }
    
        }
    
    }
  • 相关阅读:
    EF数据迁移完整步骤
    ajax跨域最全解决方案
    WPF控件与WPF窗体
    WPF模板是把控件MVC模式化
    对象与类型
    Java加权负载均衡策略
    db2列式存储
    linux离线安装mongodb及java调用
    python合并目录下excel数据
    python多线程迁移db2数仓9T数据
  • 原文地址:https://www.cnblogs.com/fangg/p/5723034.html
Copyright © 2020-2023  润新知