• java反射大白话


    转自:

    Java 反射的详细说明

    下文通过笔者的这篇文章,将带你快速入门java反射,如下所示

    java反射的概念

    JAVA反射机制:
        程序在运行时,可对任意一个实体类,
    	 对任意一个对象
    	 都可以调用其中的方法及属性
     我们将这种运行时,获取其属性的功能称之为"java反射"
     

    java反射的功效

      
    1、运行时生成对象实例
    2、运行期间调用方法
    3、运行时更改属性
    

    Java反射的使用场景

    1、在运行时判断任意一个对象所属的类
    2、在运行时构造任意一个类的对象
    3、在运行时判断任意一个类所具有的方法和属性
    4、在运行时调用任意一个对象的方法
    5、生成动态代理
    

    Java反射涉及类

    类名用途
    Class类代表类的实体,在运行的Java应用程序中表示类和接口
    Field类代表类的成员变量(成员变量也称为类的属性)
    Method类代表类的方法
    Constructor类代表类的构造方法

    例:

    User类
    
    public class User {
        private String name;
        private int age;
        private User(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public User(){
            throw new IllegalAccessError("禁止无参构造方法");
        }
        private String getName() {
            return name == null ? "" : name;
        }
        private void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
     
     
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    public class TestClass{
        public static void main(String[] args){
     
            Class<?> clz = null;
            try {
                clz = Class.forName("User");//全路径名
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
     
            // 找到带有这个参数的构造方法
            Constructor constructor = null;
            try {
                constructor = clz.getDeclaredConstructor(String.class, int.class);
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            constructor.setAccessible(true);
              // 初始化对象
            Object user = null;
            try {
                user = constructor.newInstance("猫猫",20);
            } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
                e.printStackTrace();
            }
            System.out.println("--------------"+constructor.toString());
     
           // 找到该私有方法
            Method getName = null;
            try {
     
                getName = clz.getDeclaredMethod("getName");
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            getName.setAccessible(true);
            String name = null;
            try {
                name = (String) getName.invoke(user);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            System.out.println("--------------"+name);
     
            // 找到私有属性
            Field age = null;
            try {
                age = clz.getDeclaredField("age");
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }
            age.setAccessible(true);
            try {
                age.setInt(user16, 20);   // 修改属性
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            try {
                System.out.println("--------------"+age.get(user));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
     
        }
    }
  • 相关阅读:
    【问题】MobaXterm Sftp 超时自动退出
    Redis数据持久化
    算法通关村第一关--链表青铜挑战笔记
    基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析
    有谁会易位构词c++代码啊,可以直接运行的或者需要添加完词典库就可以直接运行的
    Windows下SpringBoot连接Redis的正确使用姿势
    C++设计模式之---单例模式
    蓝牙物联网智能硬件-蓝牙网关
    (自学)黑客技术——网络安全
    深入剖析Java内存模型与volatile关键字
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/125432029