Java源文件编译之后会产生一个.class的文件,如果我们只有.class文件,而没有.java的时候,我们也可以使用这个类。
首先我们看一下这个工程的结构:
其他的地方可以忽略,只需要要知道,image包里面原来有Buddy.java编译过后产生了Buddy.class文件,接下来我们保留.class文件,删除.java文件。
接下来,我们用代码来调用.class文件中的方法。
public class Main {
public static void main(String[] args) {
try {
URL u = new URL("file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/");
URLClassLoader loader=new URLClassLoader(new URL[]{u});
Class c = loader.loadClass("image.Buddy");
Object o =c.newInstance();
Method m = c.getMethod("sleep");
m.invoke(o);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
这里需要注意一下,这里的URL是
"file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/"
类是image.Buddy
而不能把URL设置为
"file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image"
类是Buddy
以下是Buddy.java
package image;
/**
* Created by wuchen on 15/1/2.
*/
public class Buddy {
public void sleep(){
System.out.println("Buddy sleep");
}
}