美文网首页
java反射的基础操作

java反射的基础操作

作者: Bruce杨 | 来源:发表于2018-03-19 16:04 被阅读0次
    package com.bruce.demo;
    import com.bruce.demo.domain.Student;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    public class Test {
        public static void main(String[] args) throws Exception {
            try {
                Person person = new Person();
                Class clazz = person.getClass();
                /**
                 * 获取类定义的变量
                 */
                Field field = clazz.getDeclaredField("name");
                //取消java语言访问检查以访问private变量
                field.setAccessible(true);
                field.set(person, "jack");
                System.out.println(person.getName());
                /**
                 * 获取类定义的方法
                 */
                Method method = clazz.getDeclaredMethod("setTall", int.class);
                method.setAccessible(true);
                // 通过反射调用类定义的方法
                method.invoke(person, 178);
                System.out.println(person.getTall());
                /**
                 * 获取类构造函数
                 */
                Constructor[] cons = clazz.getConstructors();
                for (@SuppressWarnings("rawtypes")
                        Constructor c : cons) {
                    System.out.println(c + " " + c.getDeclaringClass());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
    
    package com.bruce.demo;
    
    /**
     * 测试反射的类
     */
    public class Person {
        private String name;
        private int tall;
    
        public Person() {
    
        }
    
        public Person(String name) {
            this.name = name;
        }
    
        public Person(int tall) {
            this.tall = tall;
        }
    
        public Person(String name, int tall) {
            this.name = name;
            this.tall = tall;
        }
    
        public String getName() {
            return name;
        }
    
        public int getTall() {
            return tall;
        }
    
        private void setTall(int tall) {
            this.tall = Integer.valueOf(tall);
        }
    
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", tall=" + tall +
                    '}';
        }
    }
    

    相关文章

      网友评论

          本文标题:java反射的基础操作

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