Java--获取 Class 类对象

1.前提:已知一个类的全类名,且该类在类路径下,可通过 Class 类的静态方法 forName() 获取,可能抛出 ClassNotFoundException,实例:Class cls1 = Class.forName("java.lang.Cat");

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

java 复制代码
package com.heima.Hello.reflection.class_;

/**
 * 演示得到 Class 对象的多种方式
 */
public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {
        // 1. Class.forName()
        String classAllPath = "com.heima.hello.Car";  // 通过读取配置文件获取
        Class<?> cls1 = Class.forName(classAllPath);
        
    }
}

2**.前提:若已知具体的类,通过类的 class 获取,该方式最为安全可靠,程序性能最高实例:Class cls2 = Cat.class;**

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

java 复制代码
package com.heima.Hello.reflection.class_;

import com.heima.Hello.Car;

/**
 * 演示得到 Class 对象的多种方式
 */
public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {
      

        // 2. 类名.class,多用于参数传递
        Class cls2 = Car.class;
        System.out.println(cls2);
    }
}

3.前提:已知某个类的实例,调用该实例的 getClass() 方法获取 Class 对象,实例:Class clazz = 对象.getClass();// 运行类型

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

java 复制代码
package com.heima.Hello.reflection.class_;

import com.heima.Hello.Car;

/**
 * 演示得到 Class 对象的多种方式
 */
public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {
       
        // 3. 对象.getClass(),应用场景,有对象实例
        Car car = new Car();
        Class cls3 = car.getClass();
        System.out.println(cls3);
        
    }
}

4.其他方式

ClassLoader cl = 对象.getClass().getClassLoader();

Class clazz4 = cl.loadClass("类的全类名");

java 复制代码
package com.heima.Hello.reflection.class_;

import com.heima.Hello.Car;

/**
 * 演示得到 Class 对象的多种方式
 */
public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {
        
        // 4. 通过类的加载器来获取到类的 class 对象
        // (1) 先得到类加载器
        ClassLoader classLoader = GetClass_.class.getClassLoader();
        // (2) 通过类加载器得到 Class 对象
        Class cls4 = classLoader.loadClass(classAllPath);
        System.out.println(cls4);

        


    }
}

5. 基本数据(int,char,boolean,float,double,byte,long,short)按如下方式得到 Class 类对象

Class cls = 基本数据类型.class

java 复制代码
package com.heima.Hello.reflection.class_;

import com.heima.Hello.Car;

/**
 * 演示得到 Class 对象的多种方式
 */
public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {
      
        // 5. 基本数据类型按如下方式得到 Class 对象
        Class<Integer> integerClass = int.class;
        Class<Character> characterClass = char.class;
        Class<Boolean> booleanClass = boolean.class;
        System.out.println(integerClass);


    }
}

6.基本数据类型对应的包装类,可以通过.TYPE 得到 Class 类对象

java 复制代码
package com.heima.Hello.reflection.class_;

import com.heima.Hello.Car;

/**
 * 演示得到 Class 对象的多种方式
 */
public class GetClass_ {
    public static void main(String[] args) throws ClassNotFoundException {
       
        // 6.基本数据类型对应的包装类,可以通过.TYPE得到 Class 类对象
        Class<Integer> type1 = Integer.TYPE;
        Class<Character> type2 = Character.TYPE;
        System.out.println(type1);



    }
}
相关推荐
小羊没烦恼!4 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里4 天前
java中的继承和多态的区别
java
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖4 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时4 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang4 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车4 天前
C/C++ 为什么需要编译器?
开发语言·c++