反射--获取Class对象的6种方式及Class常用方法,类加载

本文详细介绍了Java中Class对象的多种获取方式,包括通过`forName()`,类名`.class`,对象`.getClass()`,类加载器等。同时讲解了类加载的静态和动态加载概念,并展示了Class对象的基本使用,如创建对象实例,获取类信息和字段等。此外,还探讨了类加载对于程序依赖性的影响。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
已知一个类的全命名,且该类在类的类路径下,可以通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException

//1.Class.forName
        String classAllPath="com.yhf.Car";//通过读取配置文件获取
        Class<?> cls1 = Class.forName(classAllPath);
        System.out.println(cls1);

已知具体的类,通过类的class属性获取

//2.类名.class--参数传递
        Class cls2=Car.class;
        System.out.println(cls2);

已知某个类的实列,调用实例的getClass()方法获取

//3 对象.getclass(),有对象实例
        Car car = new Car();
        Class cls3 = car.getClass();
        System.out.println(cls3);

类加载器就是把类(class)加载进内存中

//4.通过类加载器[4种]来获取类的Class对象
        //(1)先得到类加载器car
        ClassLoader classLoader = car.getClass().getClassLoader();
        //(2)通过类加载器得到Class对象
        Class cls4 = classLoader.loadClass(classAllPath);
        System.out.println(cls4);
//5.基本数据(int, char,boolean,float,double,byte,long,short) 按如下方式得到 Class 类对象
        Class<Integer> integerClass = int.class;
        Class<Character> characterClass = char.class;
        Class<Boolean> booleanClass = boolean.class;
        System.out.println(integerClass);//int
 //6.基本数据类型对应的包装类,可以通过 .TYPE 得到 Class 类对象
        Class<Integer> type1 = Integer.TYPE;
        Class<Character> type2 = Character.TYPE;

Class常用方法

public static void main(String[] args)  {
        String classPath="com,yhf.Car";
        Class<?> cls = Class.forName(classPath);
        //显示cls对象
        System.out.println(cls);
        //输出cls运行类型
        System.out.println(cls.getClass());
        //得到包名
        System.out.println(cls.getPackage().getName());
        //得到全类名
        System.out.println(cls.getName());
        //通过cls创建对象实例
        Car car = cls.getDeclaredConstructor().newInstance();
        System.out.println(car);//car.toString
        //通过反射获取属性
        Field brand = cls.getField("brand");
        System.out.println(brand.get(car));
    }

那些类有Class对象

在这里插入图片描述

类加载

静态加载

编译时记载相关的类,如果没有就报错,依赖性强

动态加载

运行时加载需要的类,如果运行时不用该类,则不报错,降低了依赖性
在这里插入图片描述
new Dog()是静态加载,因此必须编写Dog
Person类是动态加载,因此没有编写Person类也不会报错,只有动态加载该类时,才会报错

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChinaJDK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值