java - 是否可以写一个java类文件然后运行它

标签 java file .class-file

类似这样的事情:

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类文件然后运行它?

最佳答案

是的,这是可能的。但不是你这样做的方式。

  1. 您不使用 Writer 编写二进制文件。如果这样做,您可能会得到一个损坏的文件......由于字符编码步骤破坏了您的(二进制)数据。

    使用输出流。

  2. 我不知道这是否是一个格式良好的字节码"file"。我怀疑不是。看起来它已经被二进制->文本“解码”破坏了。可能还可以复制粘贴(请参阅@Antimony 的评论)。

  3. 假设您可以设法将格式良好的类文件放入文件系统,您可能仍然需要实例化一个新的类加载器,然后才能加载它。如果您之前加载过该类,那么肯定会出现这种情况。

更好的想法是创建一个自定义 Classloader 类,并让它使用投影的 defineClass 方法直接从内存中的字节数组加载该类。

关于java - 是否可以写一个java类文件然后运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49041681/

相关文章:

java - 在 Tomcat 服务器上使用 POST 方法从 jsp 到 jsp 的错误编码

java - 如何以编程方式设置android系统时间?

delphi - 我可以设置什么文件的创建/上次修改/上次访问?

java - 使用 ASM 生成接口(interface)不起作用

java - 调用另一个 java 文件时出现错误的类文件

java - 如何通过maven让集成测试和单元测试分开运行?

java - Jackrabbit 是否允许删除文件?

java - 使用 Java 更新文件中所有出现的字符串

java - 如何在不运行的情况下在 Eclipse 中编译 Java 程序?

java - 获取 BufferedImage 的每像素位数