• 获得反射对象


    一、Java反射机制研究及应用

    Java反射机制提供的功能

    • 在运行时判断任意一个对象所属的类
    • 在运行时构造任意一个类的对象
    • 在运行时判断任意一个类所具有的成员变量和方法
    • 在运行时获取泛型信息
    • 在运行时调用任意一个对象的成员变量和方法
    • 在运行时处理注解
    • 生成动态代理

    二、Java反射优点和缺点

    优点:
    可以实现动态创建对象和编译,体现出很大的灵活性

    缺点:
    对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于直接执行相同的操作。

    三、反射相关的主要API

    java.lang.Class:代表一个类

    • java.lang.reflect.Method:代表类的方法
    • java.lang.reflect.Field:代表类的成员变量
    • java.lang.reflect.Constructor:代表类的构造器

    四、Class类

    在Object类中定义了以下的方法,此方法将被所有子类继承
    public final Class getClass()

    以上的方法返回值的类型是一个Class类,此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解即:可以通过对象反射求出类的名称。

    五、案例

    package com.massimo.reflection;
    
    //什么叫反射
    public class reflection {
        public static void main(String[] args) throws ClassNotFoundException {
            //通过反射获取类的Class对象
            Class c1 = Class.forName("com.massimo.reflection.User");  //参数为包名+类名
            System.out.println(c1);
    
            Class c2 = Class.forName("com.massimo.reflection.User");
            Class c3 = Class.forName("com.massimo.reflection.User");
            Class c4 = Class.forName("com.massimo.reflection.User");
    
            //一个类在内存中只有一个Class对象
            //一个类被加载后,类的整个结构都会被封装在Class对象中
            System.out.println(c2.hashCode());
            System.out.println(c3.hashCode());
            System.out.println(c4.hashCode());
        }
    }
    
    
    //实体类
    class User{
        private String name;
        private int id;
        private int age;
    
        public User() {
        }
    
        public User(String name, int id, int age) {
            this.name = name;
            this.id = id;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", id=" + id +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71

    效果:
    在这里插入图片描述

  • 相关阅读:
    1.7.3、计算机网络体系结构分层思想举例
    `Algorithm-Solution` `AcWing` 4726. 寻找数字
    GBASE 8A v953报错集锦22--在 redhat7.3 上安装集群安装包中 c3 rpm 包报错
    00 vue部分补充
    Map接口
    【数据结构】二叉搜索树(Java + 链表实现)
    【阅读】One-bit Active Query with Contrastive Pairs
    CobalStrike(CS)流量分析
    Python机器视觉--OpenCV入门--OpenCV中的色彩空间简介与色彩空间转换
    法律法规分论坛 | 筑牢数据合规“堤坝”
  • 原文地址:https://blog.csdn.net/Massimo__JAVA/article/details/126947463