• 获取Class类的实例的几种方式


    获取Class类的实例的几种方式

    Class类

    对象照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个不变的Class类型的对象。一个Class对象包含了特定的某个结构(class/interface/enum/annotation/primitive type/void/[])的有关信息

    • Class 本身也是一个类

    • Class 对象只能由系统建立对象

    • 一个加载的类在JVM中只会有一个Class实例

    • 一个Class对象对应的是一个加载到JVM中的一个.class文件

    • 每个类的实例都会记得自己是由哪个Class实例所生成

    • 通过Class可以完整的得到一个类中的所有被加载的结构

    • Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的Class对象

    Class类的常用方法

    获取Class类的实例

    • 若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高

    Class clazz = Person.class;

    • 已知某个类的实例,调用该实例的getClass()方法获取Class对象

    Class clazz = person.getClass();

    • 已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException

    Class clazz = Class.forName("demo01.Strdent");

    • 内置基本数据类型可以直接用类名.Type
    • 还可以利用ClassLoader


    1. public class Test02 {
    2. public static void main(String[] args) throws ClassNotFoundException {
    3. Person person = new Student();
    4. System.out.println("这个人是:"+person.name);
    5. //方式一:通过对象获得
    6. Class c1 = person.getClass();
    7. System.out.println(c1.hashCode());
    8. //方式二:forName获得
    9. Class c2 = Class.forName("com.hspedu.reflection.Student");
    10. System.out.println(c2.hashCode());
    11. //方式三:通过类名.class获得
    12. Class c3 = Student.class;
    13. System.out.println(c3.hashCode());
    14. //方式四:基本内置类型的包装类都有一个Type属性
    15. Class c4 = Integer.TYPE;
    16. System.out.println(c4);
    17. //方式五:获得父类的Class对象
    18. Class c5 = c1.getSuperclass();
    19. System.out.println(c5);
    20. }
    21. }
    22. class Person{
    23. String name;
    24. public Person() {
    25. }
    26. public Person(String name) {
    27. this.name = name;
    28. }
    29. @Override
    30. public String toString() {
    31. return "Person{" +
    32. "name='" + name + '\'' +
    33. '}';
    34. }
    35. }
    36. class Student extends Person{
    37. public Student(){
    38. this.name = "学生";
    39. }
    40. }
    41. class Teacher extends Person{
    42. public Teacher(){
    43. this.name = "老师";
    44. }
    45. }

  • 相关阅读:
    【服务器数据恢复】Ext4文件系统fsck后mount不上并报错的数据修复案例
    actuator--基础--07--自定义Endpoint
    使用Mybatis-plus清空表数据
    聊一聊redis十种数据类型及底层原理
    华为云CDN加速,带你畅游网络
    [架构之路-238]:目标系统 - 纵向分层 - 网络通信 - 网络规划与设计框架
    【LeetCode】按要求补齐数组 [H](贪心)
    猿创征文|Java-String、StringBuffer、StringBuilder详解
    云课五分钟-0B快速排序C++示例代码-注释和编译指令
    一键部署区块链背后的秘密(下)
  • 原文地址:https://blog.csdn.net/weixin_52385232/article/details/126316267