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 小时前
贪吃蛇(C语言实现,API)
c语言·开发语言
QC班长5 小时前
Maven公司私库配置踩坑点
java·服务器·maven·intellij-idea
Makoto_Kimur5 小时前
java开发面试-AI Coding速成
java·开发语言
laowangpython5 小时前
Gurobi求解器Matlab安装配置教程
开发语言·其他·matlab
wengqidaifeng5 小时前
python启航:1.基础语法知识
开发语言·python
观北海5 小时前
Windows 平台 Python 极简 ORB-SLAM3 Demo,从零实现实时视觉定位
开发语言·python·动态规划
wuqingshun3141595 小时前
说说mybatis的缓存机制
java·缓存·mybatis
空中海6 小时前
Kubernetes 生产实践、可观测性与扩展入门
java·贪心算法·kubernetes
Devin~Y6 小时前
大厂Java面试实录:Spring Boot/Cloud、Kafka、Redis、K8s 与 Spring AI(RAG/Agent)三轮连环问
java·spring boot·redis·mysql·spring cloud·kafka·kubernetes
bLEd RING6 小时前
SpringBoot3.3.0集成Knife4j4.5.0实战
java