反射——获取 Class 类对象的六种方式

Class 对象的六种获取方式



package reflection_;

/**
 * @Author: Gin
 * @Description:
 * @Modified By: Gin
 * @Date: Created in 17:06 2021/9/28
 */
public class GetClass_ {
    public static void main(String[] args) throws Exception {

        // 1. Class.forName()
        // 应用场景:读取配置文件
        String classAllPath = "reflection_.Car";
        Class cls1 = Class.forName(classAllPath);
        System.out.println(cls1);

        // 2. 类名.class
        // 应用场景:用于参数传递
        Class cls2 = Car.class;
        System.out.println(cls2);

        // 3. 对象.getClass()
        // 应用场景:有对象实例
        Car car = new Car();
        Class cls3 = car.getClass();
        System.out.println(cls3);

        // 4. 通过类加载器来获取类的 Class 对象
        // (1) 先得到类加载器
        ClassLoader classLoader = car.getClass().getClassLoader();
        // (2) 通过类加载器得到 Class 对象
        Class cls4 = classLoader.loadClass(classAllPath);
        System.out.println(cls4);

        // 一个类只有一个 Class 对象,所以 cls1, cls2, cls3, cls4 是同一个对象

        // 5. 基本数据类型(byte, short, int, long, float, double, boolean, char)按如下方式得到 Class 类对象
        Class<Integer> integerClass = int.class;
        Class<Character> characterClass = char.class;
        Class<Boolean> booleanClass = boolean.class;
        System.out.println(integerClass + " --- " + characterClass + " --- " + booleanClass);

        // 6. 基本数据类型对应的包装类,可以通过 .TYPE 得到 Class 类对象
        Class<Integer> type1 = Integer.TYPE;
        Class<Character> type2 = Character.TYPE;
        Class<Boolean> type3 = Boolean.TYPE;
        System.out.println(type1 + " --- " + type2 + " --- " + type3);

        // 5,6 两种方式得到的基本数据类型的 Class 对象是相同的
        System.out.println(integerClass.hashCode()); // 21685669
        System.out.println(type1.hashCode()); // 21685669

    }
}



在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值