像这样的东西:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class WriteClassFile
{
public static void main(String args[]) throws IOException
{
File file = new File("ClassFile.class");
file.createNewFile();
FileWriter writer = new FileWriter(file);
writer.write(getFileText());
writer.flush();
writer.close();
ClassFile classFile = new ClassFile();
classFile.print();
}
public static String getFileText()
{
return "Êþº¾ 4
<init> ()V Code LineNumberTable print
SourceFile ClassFile.java Works ClassFile java/lang/Object java/lang/System out Ljava/io/PrintStream; java/io/PrintStream (Ljava/lang/String;)V ! *· ±
% ² ¶ ±
";
}
}
public class ClassFile
{
public void print()
{
System.out.print("Works");
}
}
我试过运行这个,但是我得到了一个非法的字符例外。是否可以编写java类文件然后运行它?
对的,这是可能的。但不是你这样做的方式。
更好的想法是创建一个自定义的Classloader
类,并使用投影的defineClass
方法直接从内存中的字节数组加载类。