类似这样的事情:
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类文件然后运行它?
最佳答案
是的,这是可能的。但不是你这样做的方式。
您不使用 Writer 编写二进制文件。如果这样做,您可能会得到一个损坏的文件......由于字符编码步骤破坏了您的(二进制)数据。
使用输出流。
我不知道这是否是一个格式良好的字节码"file"。我怀疑不是。看起来它已经被二进制->文本“解码”破坏了。可能还可以复制粘贴(请参阅@Antimony 的评论)。
假设您可以设法将格式良好的类文件放入文件系统,您可能仍然需要实例化一个新的类加载器,然后才能加载它。如果您之前加载过该类,那么肯定会出现这种情况。
更好的想法是创建一个自定义 Classloader
类,并让它使用投影的 defineClass
方法直接从内存中的字节数组加载该类。
关于java - 是否可以写一个java类文件然后运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49041681/