classLoader.loadClass(className); 使用
时间: 2024-04-04 17:35:02 浏览: 12
ClassLoader.loadClass(className)是Java中用于动态加载类的方法。它接受一个字符串参数className,该参数指定要加载的类的全限定名。如果指定的类尚未加载,则会调用ClassLoader的findClass方法进行查找和加载。如果成功加载,则返回该类的Class对象,否则会抛出ClassNotFoundException异常。这种动态加载类的方式可以在程序运行时根据需要动态加载并使用类,从而实现更加灵活的程序设计。
相关问题
classLoader.loadClass(className); 使用案例
以下是一个使用ClassLoader.loadClass(className)动态加载类的简单例子:
```
public class Main {
public static void main(String[] args) throws Exception {
// 定义要加载的类的全限定名
String className = "com.example.MyClass";
// 创建自定义的ClassLoader实例
ClassLoader myClassLoader = new MyClassLoader();
// 使用ClassLoader动态加载类
Class<?> myClass = myClassLoader.loadClass(className);
// 创建该类的实例
Object myObject = myClass.newInstance();
// 调用该类的方法
myClass.getMethod("myMethod").invoke(myObject);
}
}
// 自定义ClassLoader
class MyClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
if ("com.example.MyClass".equals(name)) {
// 从文件或网络中读取类的字节码,并转换为Class对象返回
byte[] classData = {/* class file data */};
return defineClass(name, classData, 0, classData.length);
}
return super.findClass(name);
}
}
// 要动态加载的类
class MyClass {
public void myMethod() {
System.out.println("Hello, world!");
}
}
```
在上面的例子中,我们定义了一个要加载的类的全限定名为"com.example.MyClass",然后创建了一个自定义的ClassLoader实例MyClassLoader,使用它的loadClass方法动态加载该类。在加载成功后,我们创建了该类的实例,并调用了它的方法"myMethod",最终输出了"Hello, world!"。注意,由于我们使用的是自定义的ClassLoader,因此可以根据需要实现不同的加载方式,例如从文件或网络中读取类的字节码。
Class.forName(str); 使用案例
Class.forName(str)是Java中一种用于动态加载类的方法。它接受一个字符串参数str,该参数指定要加载的类的全限定名。如果指定的类尚未加载,则会调用ClassLoader的loadClass方法进行查找和加载。如果成功加载,则返回该类的Class对象,否则会抛出ClassNotFoundException异常。
以下是一个使用Class.forName(str)动态加载类的简单例子:
```
public class Main {
public static void main(String[] args) throws Exception {
// 定义要加载的类的全限定名
String className = "com.example.MyClass";
// 使用Class.forName动态加载类
Class<?> myClass = Class.forName(className);
// 创建该类的实例
Object myObject = myClass.newInstance();
// 调用该类的方法
myClass.getMethod("myMethod").invoke(myObject);
}
}
// 要动态加载的类
class MyClass {
public void myMethod() {
System.out.println("Hello, world!");
}
}
```
在上面的例子中,我们定义了一个要加载的类的全限定名为"com.example.MyClass",然后使用Class.forName方法动态加载该类。在加载成功后,我们创建了该类的实例,并调用了它的方法"myMethod",最终输出了"Hello, world!"。需要注意的是,使用Class.forName方法动态加载类时,类的静态初始化代码块也会被执行。