为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法在 Javascript 中编写像 toString 这样的 Java 方法

有没有办法在 Javascript 中编写像 toString 这样的 Java 方法

湖上湖 2022-07-06 18:33:13
对不起,如果这是一个微不足道的问题,所以如果已经问过这个问题,请引导我回答这个问题。我知道 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;}
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

免责声明:我不是 Java 专家,也不是任何编程语言方面的专家。但是,我确实知道如何在网上查找信息。

这个概念在 Java 中似乎不太可行。开始:

JavaScript 是一种解释型语言,而不是一种编译型语言。诸如 C++ 或Java之类的程序需要在运行之前进行编译。源代码通过一个称为编译器的程序传递,编译器将其翻译成机器可以理解和执行的字节码。相反,JavaScript 没有编译步骤。相反,浏览器中的解释器读取 JavaScript 代码,解释每一行并运行它。更现代的浏览器使用一种称为即时 (JIT) 编译的技术,该技术在 JavaScript 即将运行时将其编译为可执行字节码。

基本上,JavaScript 具有直接从包含源代码的文件中读取并即时执行它的优势。由于许多原因,包括安全性,Java 等编译语言默认不会内置这种功能。应用程序应该能够在不让黑客尽可能多地访问其源代码的情况下运行。

已经尝试过各种形式的你感兴趣的东西,但两种最简单的方法似乎是

  1. .java逐行打印原始文件

  2. 存储对整个代码或所需方法的字符串引用。

似乎也可以打印方法名称,但不能打印正文。

除此之外,您可能能够从已编译、正在运行的 java 程序中获得的唯一东西是字节码,这需要反编译器才能理解其背后的源代码。


查看完整回答
反对 回复 2022-07-06
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

可能是的,但不是一个带有就绪命令的微不足道的命令。JavaScript 是一种解释性语言,其中执行环境可以访问原始形式的源代码。这就是您可以在浏览器控制台中检查它并查看与源代码中相同的变量名称的方式。

虽然Java的编译/解释区别是模糊的,但在执行之前肯定会对其进行修改。Java 的即时编译使用的字节码可能比完全编译的二进制文件更具可读性,它不是源代码。如果正在运行的程序无权访问源代码,则输出它的能力较差。在 IDE 中运行的调试器可以引用源代码中的问题;否则,您只能调试字节码

这就是为什么基诺克莱顿提出关于奎因程序的问题,这些程序旨在自我复制。此答案通过将源代码硬编码为类属性来输出源代码。您可以通过预编译脚本采用类似的方法,该脚本遍历所有方法并从它们的源中生成字符串,但结果会很庞大并且可能很敏感。


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信