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

位于Java类文件中的lambda的代码在哪里?

华涵意
2023-03-14
问题内容

我有这个Java源文件:

import java.util.function.*;
public class t {
   public static void main(String[] args) {
      Function<Integer,Integer> r = (a) -> a*a+2*a+1;
      System.out.println(r.apply(2));
   }
}

我编译它,并且按预期方式工作。这是的输出javap -c -v t,我找不到lambda的位置。Integer每当调用lambda时,告诉jvm使用输入来计算表达式的字节码在哪里?


问题答案:

如果要查看lambda主体的代码a*a+2*a+1,则应调用javap -c -v -p t以查看 私有 方法:

private static java.lang.Integer lambda$main$0(java.lang.Integer);
descriptor: (Ljava/lang/Integer;)Ljava/lang/Integer;
flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
Code:
  stack=3, locals=1, args_size=1
     0: aload_0
     1: invokevirtual #7                  // Method java/lang/Integer.intValue:()I
     4: aload_0
     5: invokevirtual #7                  // Method java/lang/Integer.intValue:()I
     8: imul
     9: iconst_2
    10: aload_0
    11: invokevirtual #7                  // Method java/lang/Integer.intValue:()I
    14: imul
    15: iadd
    16: iconst_1
    17: iadd
    18: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    21: areturn
  LineNumberTable:
    line 4: 0


 类似资料:
  • 为什么keytool不能在没有-keystore&-storePass标志的情况下列出根CA?

  • 根据文档,Dart的SDK应该在Flutter下载时捆绑在一起: Dart SDK与Flutter捆绑在一起,不需要单独安装Dart 然而,我用Android Studio打开了一个现有的Flutter项目,它建议我要么“下载Dart SDK”,要么“打开Dart设置”: 显然,我需要“打开Dart设置”并告诉Android Studio在哪里可以找到Dart的SDK。但是,它无法在目录中找到它。

  • 问题内容: 我正在运行JBoss服务器(在Eclipse内部),其中混入了一些Hibernate。我从这里安装了Oracle的ojdbc驱动程序: Oracle Database 11g第2版JDBC驱动程序 我专门下载了文件:ojdbc6dms_g.jar,该文件根据站点包含支持DMS的工具。但是,当我启动AS服务器时,得到以下信息: 当服务器尝试获取新的hibernateejb异常时。 我检查

  • 问题内容: 我正在寻找Sun标准Java编译器的源代码。 jdk1.6.0_07有一些相关的类,但它们是接口(和)。在和下还有一些包,它们似乎是表示Java抽象语法树的接口。 但是我找不到编译器源-有人知道它在哪里吗? 问题答案: 检查此站点Java编程语言编译器(javac)组。来源在Mercurial存储库中。 jdk7 / tl / langtools(对于JDK 1.7) jdk6 / j

  • 问题内容: Java 9中的JRE文件夹在哪里?我在某些站点中看到JRE存在于单独的分发文件夹中。但是它位于哪里? 问题答案: JDK和JRE运行时映像已在JDK 9中进行了重组。JDK运行时映像不再包含“ jre”子目录。 有关重组的摘要,请参见JDK 9发行说明(“ 模块化运行时图像”说明)。 JEP 220记录了新布局的动机和所有细节。 自2014年底以来,JDK 9的早期访问版本中就进行了

  • 问题内容: 我知道常量池的概念以及JVM用于处理字符串文字的字符串常量池。但是我不知道JVM使用哪种类型的内存来存储String常量文字。堆栈还是堆?由于它的文字不与任何实例相关联,因此我假定它将存储在堆栈中。但是,如果没有任何实例引用该文字,则必须通过GC运行来收集文字(如果我错了,请纠正我),那么如果将其存储在堆栈中,该如何处理? 问题答案: 从技术上来说,答案都不是。根据Java虚拟机规范,