1
11
是的,这是可能的。 一个简单的实现是:将源代码包含在一个字符串中,将该字符串保存到一个文件中,并用相同的字符串填充它自己的字符串(否则,由于此实现的递归方式,初始字符串的大小将是无限的),编译该文件,然后运行编译后的文件(这反过来又会做非常相同的事情)。 非平凡的实现非常困难。 |
2
22
更新:好吧,不妨让它自动运行。享受疯狂。自己承担风险。
是的,这是可能的,因为我确实写了。
下面是如何开始疯狂的方法:
请注意,这不会做任何逆向工程或通过阅读
所以从技术上讲,没有无限循环:当文件系统无法处理另一个循环时,它最终会停止。
|
3
6
当然可以-看看 rosetta code 导航到Quine,也就是 一种无需任何外部访问就可以输出自己的源的自引用程序。 . Java中有一个奎因的例子。 |
4
4
示例程序输入 爪哇 它可以自我复制。
输出:
|
5
2
为此,您可以使用Java编译器API(JSR-199)。下面是JSR-199中的代码,它从一个字符串编译代码(稍微修改一下使其编译)。代码实际上是从
这可能是一个起点(归功于原作者彼得·范德阿)。 顺便说一句,使用这个API当然需要一个JDK。 |
6
1
我不知道你到底想要什么,但我想 BeanShell 是你可以使用的东西。 Beanshell是一名翻译。您可以运行未编译的Java代码(因此,您给它一个带代码的字符串,然后运行它)。 当然,如果你真的想做你写的,运行程序的机器需要一个JDK来编译你的程序。 希望这有帮助 |
7
0
我认为它不会用Java工作。这不包括重写正在运行的类文件吗? 假设您的程序是在quine.java中编译为quine.class。 现在quine.class将尝试将其输出写入quine.java(目前为止还不错),并将其编译为quine.class。这将是一个问题,因为quine.class已经在运行了 |
8
0
是-不要忘记使用JDK而不是JRE:
|