获取class对象的六种方式

前言:
java程序在计算机中运行有,三个主要的阶段,代码阶段/编译阶段,Class类阶段(加载阶段),runtime运行阶段。在不同的阶段我们可以通过不同的方法来获取class对象。
在这里插入图片描述


一 通过Class类静态方法forName(“类包名.类名”)获取实例

此方法的前提是,已知一个类的全类名,且该类在类路径下,可通过class类的静态方法forName()获取,可能抛classnotfoundException. 。
实例:

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

应用场景:多用于配置文件, 读取全路径,加载类


二 使用类名.class获取

已知具体的类,通过类的class获取,该方式最为安全可靠,程序性能最高
实例:

 //2 类名.class,应用场景,有对象实例
        Class cls2 = Car.class;
        System.out.println(cls2);

应用场景:多用于参数传递,比如通过反射得到对应构造器对象。


三 通过对象.getclass()获取

已知某个类的实例 ,调用该实例的getclass()方法获取class对象。
实例:

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

应用场景:通过创建好的对象,获取class对象。


四 通过类加载器获取对象

通过类加载器来获取对象,首先得获取类加载器,再通过类加载器来获取class对象。
实例:

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


五 基本数据类型获取class对象

实例:

//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

六 基本数据类型对应的包装类通过.TYPE获取

实例:

 //6.基本类型对应的包装类,可以通过 .TYPE 得到Class类对象
        Class<Integer> type = Integer.TYPE;
        Class<Character> type1 = Character.TYPE;//其它包装类Boolean,Double,long,byte等等。

总结

我们将前面4种方法打印

//cls1,cls2,cls3,cls4 其实是同一个对象
        System.out.println(cls1.hashCode());
        System.out.println(cls2.hashCode());
        System.out.println(cls3.hashCode());
        System.out.println(cls4.hashCode());

结果:

在这里插入图片描述


4种方法获得的对象都是一样的! 这是因为在内存里边,不管怎么处理,在class类对象/堆里只有,对于一个类而言只有一个class对象与之对应

猜你喜欢

转载自blog.csdn.net/a545__27/article/details/130919592