繁体   English   中英

是否可以编写一个Java类文件然后运行它

[英]Is it possible to write a java class file and then run it

像这样:

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");
    }
}

我已经尝试过runnng,但是却收到非法字符异常。 是否可以编写一个Java类文件然后运行它?

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

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

    使用OutputStream。

  2. 我不知道这是否是格式正确的字节码“文件”。 我怀疑不是。 看起来它已经被二进制->文本“解码”所破坏。 并可能也进行复制粘贴(请参阅@Antimony的评论)。

  3. 假设您可以设法将格式正确的类文件导入文件系统,则可能需要实例化一个新的类加载器,然后才能加载它。 如果您先前已加载类,肯定会是这种情况。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM