求教高手,怎样能在代码里动态的import外面的包 看看我回的帖子http://community.csdn.net/Expert/topic/3209/3209537.xml?temp=.7294275 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 利用 reflectiontry { Class.forName("java.lang.Object");} catch (ClassNotFoundException e) { e.printStackTrace();}没有找到自动抛出异常 Class clazz;Object instance; try { // 如果没有自动抛异常 clazz = Class.forName("java.lang.Object"); instance = clazz.newInstance();} catch (ClassNotFoundException e) { e.printStackTrace();}这个方法只能使用默认构造函数(而且被调用类必须有无参构造函数)如果想要使用带参的构造函数就麻烦很多import java.lang.reflect.*public static void main(String args[]) { Class clazz; Class[] param; Constructor[] con; Object instance; try { clazz = Class.forName("java.lang.String"); con = clazz.getConstructors(); for (int i = 0; i < con.length; i++) { param = con[i].getParameterTypes(); for (int j = 0; j < param.length; j++) { if (param[j] == String.class && param.length == 1) { instance = con[i].newInstance(new String[]{"Hello World!",}); System.out.println((String) instance); } } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } }上面只是一个例子,真正用起来可能更麻烦,但是 reflection 功能绝对够强 首先对于第一个问题:判断是否有此包(类)的存在因为jvm导入类时有至少三个步骤:1。先从引导类装载器载入(rt.jar)2。从扩展类装载器载入(jre/lib/ext/)3。从系统类装载器载入(classpath)如果需要动态载入类,应该:ClassLoader.getSystemClassLoader方法获得系统加载类器。当然这个有问题。最好使用下面的代码:Thread t = Thread.currentThread();ClassLoader loader = t.getContextClassLoader();Class c = loader.loadClass( className );//如果没找到会抛出异常ClassNotFoundException,你可以捕捉它,执行你的需要的功能第二个问题:导入类那就扩展ClassLoader,编写自己的类装载器!但不管如何,你总要知道你想导入的类或包的具体位置的! certpath类源码有吗?类似的也行 Java 正则提取内容问题 java 事件与监听 求教 弱问,为什么Java类只能用Public和默认访问修饰符,而不能用其他两个。 用POI解析EXCEL文件报错,高人指点. 关于网络传输的俄罗斯方块问题,有经验的帮帮小弟啊~~~ 这样可以为什么这样就不可以了呢 高分:Java如何接收和发送整个网页内容 db2连接问题?解决后马上给分!急! 推荐java书 关于继承类初试化的问题,高手看看 applet引用的包能不能来自多个jar包,即archive中写多个.jar
try {
Class.forName("java.lang.Object");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
没有找到自动抛出异常
Object instance;
try {
// 如果没有自动抛异常
clazz = Class.forName("java.lang.Object");
instance = clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}这个方法只能使用默认构造函数(而且被调用类必须有无参构造函数)
如果想要使用带参的构造函数就麻烦很多import java.lang.reflect.*public static void main(String args[]) {
Class clazz;
Class[] param;
Constructor[] con;
Object instance; try {
clazz = Class.forName("java.lang.String");
con = clazz.getConstructors();
for (int i = 0; i < con.length; i++) {
param = con[i].getParameterTypes();
for (int j = 0; j < param.length; j++) {
if (param[j] == String.class && param.length == 1) {
instance = con[i].newInstance(new String[]{"Hello World!",});
System.out.println((String) instance);
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}上面只是一个例子,真正用起来可能更麻烦,但是 reflection 功能绝对够强
因为jvm导入类时有至少三个步骤:
1。先从引导类装载器载入(rt.jar)
2。从扩展类装载器载入(jre/lib/ext/)
3。从系统类装载器载入(classpath)
如果需要动态载入类,应该:
ClassLoader.getSystemClassLoader方法获得系统加载类器。当然这个有问题。最好使用下面的代码:
Thread t = Thread.currentThread();
ClassLoader loader = t.getContextClassLoader();
Class c = loader.loadClass( className );//如果没找到会抛出异常ClassNotFoundException,你可以捕捉它,执行你的需要的功能第二个问题:导入类
那就扩展ClassLoader,编写自己的类装载器!
但不管如何,你总要知道你想导入的类或包的具体位置的!