当前位置: 首页 > 面试题库 >

有些方法包含编译代码?

尹冠宇
2023-03-14
问题内容

从一些类的源代码开始,我看到一些方法包含编译后的代码,在扩展之前,它们看起来像这样:

public void someMethod(){
Compiled Code
}

扩展该方法时,您可以看到其中的代码被写为注释。

请参阅以下方法之一sun.awt.shell.ShellFolder

    public boolean isFileSystem() {
     // <editor-fold defaultstate="collapsed" desc="Compiled Code">
     /* 0: aload_0
     * 1: invokevirtual #362  // Method getPath:()Ljava/lang/String;
     * 4: ldc           #7    // String ShellFolder
     * 6: invokevirtual #342  // Method java/lang/String.startsWith:(Ljava/lang/String;)
      /........
   */
      // </editor-fold>
    }

我有兴趣进一步了解这些方法以及所使用的语言。
是否可以编写自己的编译代码?


问题答案:

也就是Java(或其他Java兼容语言,如注释所示)。

当给您一个jar文件(例如带有JDK / JRE的rt.jar)时,该文件已经被编译。高级代码,例如:

HashMap<Foo, Bar> baz=Quuz.getInstance(); //This is obviously fake

被转换为人类不可读的低级字节码。

该字节码包含元数据,例如方法参数类型,以及加载这些类和方法所需的信息。IDE需要为库(例如添加到项目类路径的jar)提供语法完成,更重要的是要加载和使用从这些库获得的类的方法。

您在此处看到的“代码”是一个摘要,以及一种称为字节码的代码类型。逐行显示,ldc示例中的指令在一次为JVM供电的堆栈的一小部分上运行。该字节码很难手工读取和编程,因此编译器将为您生成它。

所有这些(某些本地方法除外)都是用JVM兼容语言实现的。

根据库及其限制以及IDE的功能,可能会在另一个程序包中获取完整的源代码并“附加”,以便您的IDE显示源代码而不是机器生成的摘要,或者反编译返回具有相同功能的Java源代码1。

1 Java编译器通常输出很容易将字节码转换为具有相同功能的源代码(对于其他编译语言,例如C / C
++,则不是这样)。可以使用Proguard等工具对代码进行混淆,该工具用无用的标识符替换标识符,并可以将某些操作转换为高度不清楚的标识符,并在执行时产生相同的结果。



 类似资料:
  • 问题内容: 主要问题 我想做的很简单。否则,您会认为。但是,没有任何工作正常。 要求: 使用maven,使用AspectJ编译器编译Java 1.6项目。 注意: 我们的代码无法使用javac进行编译。也就是说,如果未编织方面,则编译将失败(因为我们拥有可以软化异常的方面)。 2011年 2月21日 更新: 对此有两种同等可行的解决方案(两种情况都将 AspectJ-maven-plugin 与

  • 问题内容: 好吧,标题是不言而喻的。我在编译有很多注释行的项目时想知道这一点。这有点愚蠢,因为jar文件不会增加太多(某些字节),但是我很好奇这是否会影响带有大量代码和注释的程序。 谢谢 问题答案: 它不会影响执行或性能(除非您注释了错误的语句:-) 但这 绝对 会影响可读性。没有理由(在生产中)使用大量注释掉的代码,版本控制是必经之路 另请参阅 此问题。 问题结束。

  • 有时,我们需要从源代码重新编译一个Kali包.幸运的是用APT下载源代码包,进行必要的修改后再用Debian工具重新编译是如此的简单.此例中,为了添加额外的Mifare Key硬编码到mifare格式化工具,我们将重新编译libfreefare这个包. 下载包的源代码 # Get the source package apt-get source libfreefare cd libfreefar

  • 问题内容: 我正在编写Android应用程序,此处的最佳方法通常可能与Java相同或不同。 我只是希望能够设置一个调试标志,该标志仅在设置为true时才执行代码的某些部分–等同于C ++设置预处理器#define DEBUG并使用#ifdef DEBUG。 在Java中是否有公认的或最佳的方法来完成此任务? 现在,我只是要在Application对象中设置一个变量,但是我不认为这是最好的方法。 问

  • 我下载了一个名为PDFCLOWN的开源项目。运行它的样本,它似乎运行得很好。 谢谢! 只需提及一下,这个项目使用ant,这意味着编译过程不是由用户直接运行的,而是使用build.xml文件运行的。

  • 1.1. 代码编译 1.1.1. Openwrt编译 1.1.2. Kernel编译 1.1.3. Uboot编译 1.1.4. VSP编译 1.1. 代码编译 1.1.1. Openwrt编译 作为Kamino18 YODAOS的整体编译环境,使用openwrt可以编译出系统正常运行所需的主要image如下: 镜像名字 镜像运行位置 镜像说明 镜像生成位置 mcu.bin MCU The ima