当前位置: 首页 > news >正文

Java高级-02.反射-认识反射、获取类

一.何为反射

所谓反射,就是加载类,并将类中的各种成分解剖出来,如成员变量、方法、构造器等。然后对这些成员变量、方法、构造器等进行操作。

当我们使用idea时,出现这种提示,如.study()方法的提示就是使用反射解构出来的。

二.反射学什么

三.加载类,获取类的字节码文件

我们首先定义一个Student类,

package com.njau.d2_reflect;

public class Student {
    private String name;
    private  int age;
    private char sex;
    private double height;
    private String hobby;

    public Student(String name, int age, char sex, double height, String hobby) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.height = height;
        this.hobby = hobby;
    }

    public Student() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", height=" + height +
                ", hobby='" + hobby + '\'' +
                '}';
    }
}

接着我们通过以上获取Class对象的三种方式来获取Student类的类对象

首先第一种方式是通过类名.class的方式获取:

第二种方式是通过Class.forname(全类名)的方式获取:

第三种方式是通过该类的实现类对象调用.getClass()方法获取。

package com.njau.d2_reflect;

/**
 * 目标:了解反射并掌握获取Class对象的3种方式
 * 反射:
 * 反射就是:加载类,并允许以编程的方式解剖类的各种成分(成员变量、方法、构造器等)
 * 获取Class对象的三种方式
 * 1、Class c1 = 类名.class
 * 2、调用Class提供方法:public static Class forName(String package);
 * 3、Object提供的方法:public Class getClass();   Class c3 = 对象.getClass();
 */
public class Test1Class {
    public static void main(String[] args) throws Exception {
        Class c1 = Student.class;
        System.out.println(c1.getName());   // com.njau.d2_reflect.Student(全类名)
        System.out.println(c1.getSimpleName());  //  Student

        Class c2 = Class.forName("com.njau.d2_reflect.Student");
        System.out.println(c2);   // class com.njau.d2_reflect.Student
        System.out.println(c2==c1);  // true

        Student s = new Student();
        Class c3 = s.getClass();
        System.out.println(c3);   // class com.njau.d2_reflect.Student
        System.out.println(c3 == c2);   // true
    }
}

我们通过验证可以知道获取到的都是同一个Student类对象,因为一个类只能存在一个。

http://www.dtcms.com/a/68675.html

相关文章:

  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-3-从ES 7.x到8.x的平滑迁移策略
  • 如果关闭 CONFIG_MODULE_SIG
  • Visual Studio工具
  • Prosys OPC UA Gateway:实现 OPC Classic 与 OPC UA 无缝连接
  • 微软远程桌面即将下架?Splashtop:更稳、更快、更安全的 RDP 替代方案
  • C++中虚析构函数的作用是什么?为什么基类需要虚析构函数?
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-2-性能调优工具箱
  • BitComet GreenLight,内网黄灯转绿灯 (HighID), 增加p2p连接率提速下载
  • 掌握市场先机:9款销售渠道管理工具深度测评
  • Trae插件革命:用VSPlugin Helper实现VSCode市场插件全自动安装
  • Git 本地常见快捷操作
  • OpenAI Agents SDK 中文文档 中文教程 (5)
  • 计算机的物理组成——微机的物理结构
  • 如何用collect_set等函数实现map结构的数据
  • Java面向对象编程进阶:深入理解static、单例模式与继承
  • 以太坊AI代理与PoS升级点燃3月市场热情,2025年能否再创新高?
  • 列表动态列处理
  • 使用 Clang API 编译 C++
  • Flink之水印(watermark)的补充理解
  • Dynamics 365 启用用户安全角色变更的审核功能
  • Python进行深度学习来处理包含900天太阳相关数据的数据集并完成预测,同时开发用户界面的详细示例
  • 《Java SQL 操作指南:深入理解 Statement 用法与优化》
  • LeetCode 热题 100_前 K 个高频元素(73_347_中等_C++)(堆)(哈希表+排序;哈希表+优先队列(小根堆))
  • buu-ciscn_2019_ne_5-好久不见50
  • 学习threejs,使用MeshFaceMaterial面材质容器
  • Java泛型程序设计使用方法
  • 探索 C 语言枚举类型的奇妙世界
  • 【NLP 37、实践 ⑨ NER 命名实体识别任务 LSTM + CRF 实现】
  • Language Models are Few-Shot Learners,GPT-3详细讲解
  • petalinxu 在zynq的FPGA下的ST7735S的驱动配置