是否可以编写java类文件然后运行它

问题描述 投票:0回答:1

像这样的东西:

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

java file .class-file
1个回答
2
投票

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

  1. 您不使用Writer编写二进制文件。如果这样做,您可能最终得到一个损坏的文件...由于字符编码步骤损坏您的(二进制)数据。 使用OutputStream。
  2. 我不知道这是否是格式良好的字节码“文件”。我怀疑不是。它看起来已经被二进制文件 - >文本“解码”所破坏。也可能是复制粘贴(参见@ Antimony的评论)。
  3. 假设您可以设法将格式良好的类文件添加到文件系统中,您可能仍需要在加载之前实例化新的类加载器。如果您之前已加载该类,则肯定会出现这种情况。

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

© www.soinside.com 2019 - 2024. All rights reserved.