大神们,急求解一道java编程题,实在不会做啊
类的动态加载(编写一个JAVA文件,并在电脑的其他地方非本工程里存放一个或几个.class文件。在编写的这个JAVA文件中引用.class对象并使用.class中的方法。...
类的动态加载(编写一个JAVA文件,并在电脑的其他地方非本工程里存放一个或几个.class文件。在编写的这个JAVA文件中引用.class对象并使用.class中的方法。在静态加载方法中我们都是通过 类名 对象名=new 类名();实现类的加载)
展开
3个回答
展开全部
一:想要加载的类在java虚拟机启动前已经存在于classPath中,要加载这个类
可以通过两种方式:
1.Class.forName(String className)
2.ClassLoader.loadClass(String className,boolean resolve) 参数resolve表示是否连接
以上方法都可以动态的,在程序运行过程中加载类。className是类的全限定类名,并且这个类的.class文件必须在jvm的CLASS_PATH上
二:想要加载的类不在classPath中,或者java虚拟机启动后才放入classPath中,这时需要变更ClassLoader。
URL url = new URL("file:/D:/demo/");
URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url});
Object o = myClassLoader.loadClass("Test").newInstance();
类加载后用反射调用方法:
Class c = o.getClass();
Method m = c.getDeclaredMethod("mthod");
//m.setAccessible(true); //看情况是否设置m的访问权限。
m.invoke(o);
可以通过两种方式:
1.Class.forName(String className)
2.ClassLoader.loadClass(String className,boolean resolve) 参数resolve表示是否连接
以上方法都可以动态的,在程序运行过程中加载类。className是类的全限定类名,并且这个类的.class文件必须在jvm的CLASS_PATH上
二:想要加载的类不在classPath中,或者java虚拟机启动后才放入classPath中,这时需要变更ClassLoader。
URL url = new URL("file:/D:/demo/");
URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url});
Object o = myClassLoader.loadClass("Test").newInstance();
类加载后用反射调用方法:
Class c = o.getClass();
Method m = c.getDeclaredMethod("mthod");
//m.setAccessible(true); //看情况是否设置m的访问权限。
m.invoke(o);
追问
能不能给我具体的代码
追答
//DynamicLoading.java
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
public class DynamicLoading {
public static void main(String[] args) throws Exception {
URL url = new URL("file:/F:/demo/"); //A和此类必须用同样的编译器版本编译,否则报错
URLClassLoader ucl = new URLClassLoader(new URL[]{url});
Object o = ucl.loadClass("A").newInstance();
Class c = o.getClass();
Method m = c.getDeclaredMethod("print");
m.setAccessible(true);
m.invoke(o);
}
}
//A.java
//A编译后放到F:\demo\
class A {
private void print() {
System.out.println("A has been loaded");
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询