首页 文章

Java中的自修改代码[关闭]

提问于
浏览
10

你有没有在Java中创建或遇到self modifying code?如果是,那么请发布链接或只是发布代码 .

7 回答

  • 1

    这应该很难实现 . 但是您可以在运行时创建新类并使用自定义类加载器加载它们 . 如果要再次修改代码,则必须重新加载该类 .

  • 9

    来自BCEL

    字节代码工程库旨在为用户提供分析,创建和操作(二进制)Java类文件(以.class结尾的文件)的便捷方式 . 类由包含给定类的所有符号信息的对象表示:特别是方法,字段和字节代码指令 .

  • 0

    您可以编写(Java)代码,在运行时使用像bcel这样的库生成新类(字节代码) . 这与自修改代码并不完全相同 . 我怀疑自修改代码不是JVM支持的东西 .

    有关在运行时生成新代码的示例,请查看clojure的源代码 .

  • -2

    忽略悲伤的世界,你可能通过自我修改代码(!)引起自己,在我看来有3个选项:

    • 使用Java 6的内置编译器支持和write / recompile / reload类

    • 使用Apache BCEL字节码操作库直接编写您的类

    • 利用Java 6的内置脚本支持(或使用Apache BSF)以您选择的JVM脚本语言编写方法,并执行这些

    在上面三个中,我最初的选择(在没有要求的情况下)将是看看选项3.我怀疑这是最难以开始的方式 . 我已经使用了以上所有 - 不幸的是我无法发布到客户端代码的链接 .

  • 1

    我为此目的看到了这些选项:

    • 生成java源代码并使用外部javac或内部编译器工具进行编译(不记得名称) . 由于您负责命名,因此只需在类名中包含版本计数,以避免类加载异常 .

    • 使用内置的JavaScript引擎支持

    • 使用Java Proxys可以解决一些场景

    Edit :我曾经创建了一个Java 1.4程序,该程序从现有的遗留数据库中获取业务规则,生成java文件(基本上是Predicate接口的实现),带有一堆println(),并使用命令行javac编译它们 .

  • 1

    作为一名本科生,我开始研究JikesRVM . 它是一个用Java实现的(大部分)JVM . 在运行时它将JIT编译自己!这是一项非常酷的技术 .

  • 1

    你总是可以使用动态语言......

相关问题