问题描述
抱歉,如果这是一个琐碎的问题,那么如果已经有人问过,请引导我解决该问题。
我知道javascript中的tostring方法(如果在函数上调用)将打印源代码(有关它的更多信息: )。 在Java中可以做同样的事情吗?
因此,如果我具有以下标识函数定义:
public class class1 {
int f1(int x){
return x;
}
}
以及以下主要功能:
class Main {
public static void main(String args[]) {
class1 c1 = new class1();
????
}
}
有什么我可以代替的吗? 那会打印像
int f1(int x){
return x;
}
1楼
Keno Clayton
1
已采纳
2019-02-25 02:31:39
免责声明:我不是Java或与此相??关的任何编程语言的专家。 但是,我确实知道如何在线查找信息。
这个概念在Java中似乎不太可行。 开始:
在运行之前,需要先编译诸如C ++或Java的程序。 源代码通过称为编译器的程序传递,该程序将其转换为机器可以理解并可以执行的字节码。 相反,JavaScript没有编译步骤。 取而代之的是,浏览器中的解释器读取JavaScript代码,解释每一行并运行它。 越来越多的现代浏览器使用称为即时(JIT)编译的技术,该技术在JavaScript即将运行时将其编译为可执行的字节码。
基本上,JavaScript的优势是直接从带有源代码的文件中读取并即时执行。 出于多种原因(包括安全性),默认情况下,诸如Java之类的编译语言默认不会内置这种功能。 应用程序应该能够在不允许黑客尽可能多地访问其源代码的情况下运行。
已经尝试过进行各种形式的感兴趣的操作,但是最简单的两种方法似乎是
-
逐行打印原始
.java
文件 - 存储对整个代码或所需方法的字符串引用。
似乎也可以打印方法名称,而不是正文。
除此之外,从编译的,正在运行的Java程序中唯??一可以得到的就是字节码,这将需要反编译器有任何希望了解其背后的源代码。
您可以通过以下一些链接继续阅读:
2楼
MBer
1
2019-02-25 02:44:51
可能是的,但是使用现成的命令却不是一件容易的事。 JavaScript是一种解释型语言,执行环境可以访问其原始格式的源代码。 这样便可以在浏览器控制台中对其进行检查,并查看与源代码中相同的变量名称。
尽管 ,编译/解释的区别是 ,但在执行之前肯定会对其进行修改。 Java的即时编译所使用的可能比完全编译的二进制文件更具可读性,它不是源代码。 如果正在运行的程序无权访问源代码,则输出它的能力将降低。 在IDE中运行的调试器可以引用源代码中的问题。 否则,您将只能 。
这就是为什么Keno Clayton在Quine程序上提出这个问题的原因,该程序旨在自我复制。 通过将其硬编码为类属性来输出源代码。 您可以对预编译脚本采取类似的方法,该脚本会遍历所有方法并从其源中提取字符串,但是结果会很庞大且可能很敏感。