Java 根据类名获取类
简介
在 Java 中,根据类名获取类是一种常见的操作,用于在运行时动态加载和使用类。这在许多场景中都很有用,例如:
反射
插件系统
代码生成
获取类的方法
Java 提供了两种方法来根据类名获取类:
1. Class.forName()方法
`Class.forName()` 方法接收一个类的完全限定名称(包括包名)作为字符串,并返回该类的 `Class` 对象。```java Class> clazz = Class.forName("java.lang.String"); ```
2. ClassLoader.loadClass()方法
`ClassLoader.loadClass()` 方法也接收一个类的完全限定名称作为字符串,但它还允许指定一个类加载器。类加载器负责将类从文件系统或其他来源加载到 JVM 中。```java ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Class> clazz = classLoader.loadClass("java.lang.String"); ```
注意:
如果类不存在或无法加载,`Class.forName()` 和 `ClassLoader.loadClass()` 都会抛出 `ClassNotFoundException`。
`Class.forName()` 在类首次加载时进行初始化,而 `ClassLoader.loadClass()` 仅加载类,但不会初始化。
对于性能敏感的代码,推荐使用 `ClassLoader.loadClass()`。
示例
以下示例演示如何使用 `Class.forName()` 获取 `String` 类:```java Class> clazz = Class.forName("java.lang.String");// 创建该类的实例 String str = (String) clazz.newInstance();// 使用该类 System.out.println(str.toUpperCase()); ```输出:``` STRING ```
**Java 根据类名获取类****简介**在 Java 中,根据类名获取类是一种常见的操作,用于在运行时动态加载和使用类。这在许多场景中都很有用,例如:* 反射 * 插件系统 * 代码生成**获取类的方法**Java 提供了两种方法来根据类名获取类:**1. Class.forName()方法**`Class.forName()` 方法接收一个类的完全限定名称(包括包名)作为字符串,并返回该类的 `Class` 对象。```java Class> clazz = Class.forName("java.lang.String"); ```**2. ClassLoader.loadClass()方法**`ClassLoader.loadClass()` 方法也接收一个类的完全限定名称作为字符串,但它还允许指定一个类加载器。类加载器负责将类从文件系统或其他来源加载到 JVM 中。```java ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); Class> clazz = classLoader.loadClass("java.lang.String"); ```**注意:*** 如果类不存在或无法加载,`Class.forName()` 和 `ClassLoader.loadClass()` 都会抛出 `ClassNotFoundException`。 * `Class.forName()` 在类首次加载时进行初始化,而 `ClassLoader.loadClass()` 仅加载类,但不会初始化。 * 对于性能敏感的代码,推荐使用 `ClassLoader.loadClass()`。**示例**以下示例演示如何使用 `Class.forName()` 获取 `String` 类:```java Class> clazz = Class.forName("java.lang.String");// 创建该类的实例 String str = (String) clazz.newInstance();// 使用该类 System.out.println(str.toUpperCase()); ```输出:``` STRING ```