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

java(compiler或jvm)是否以不同方式处理类的静态最终成员?如果是的话

陈康胜
2023-03-14
问题内容

围绕静态最终常量进行一些优化(例如用文字替换变量等)以提高性能似乎是合乎逻辑的


问题答案:

对于可以内联常数(字符串,数字),编译 表现不同,是的。

当编译器发现一个常量表达式时,它将该常量表达式的结果嵌入到使用该常量表达式的代码中,而不是每次都对其进行计算。因此,如果您有:

public static final int FOO = 10;
public static final int BAR = 5;

...
System.out.println(FOO * BAR);

那么常量值50将直接嵌入代码中。

请注意,这具有与之相关的版本说明警告-
如果更改FOOBAR,则还需要重新编译引用它的所有内容…否则,它们仍将使用“旧”值,因为它将嵌入其字节码中。



 类似资料:
  • 本文向大家介绍Java类的静态成员是什么?,包括了Java类的静态成员是什么?的使用技巧和注意事项,需要的朋友参考一下 在Java中,静态成员是属于该类的成员,您可以在不实例化该类的情况下访问这些成员。 static关键字可以与方法,字段,类(内部/嵌套),块一起使用。 静态方法-您可以使用关键字static创建静态方法。静态方法只能访问静态字段,方法。要访问静态方法,无需实例化该类,只需将类名用

  • 根据这个官方的样本项目(https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/typescript_nodejs/13.core-bot/src/bots/dialogAndWelcomeBot.ts)我可以使用以下(我的代码)标识新成员并向他们发送欢迎信息: 它在使用模拟器时工作得很好。一旦我连接到聊天,我就会收到

  • 本文向大家介绍什么是C#类的静态成员?,包括了什么是C#类的静态成员?的使用技巧和注意事项,需要的朋友参考一下 我们可以使用static关键字将类成员定义为static。当我们将一个类的成员声明为静态成员时,这意味着无论创建了多少个该类的对象,静态成员只有一个副本。 关键字static表示该类仅存在成员的一个实例。静态变量用于定义常量,因为可以通过调用该类而不创建其实例来检索其值。静态变量可以在成

  • 问题内容: 我在想,如果您有一个静态方法 不 同步,但并 没有 修改任何静态变量是线程安全的?如果该方法在其中创建局部变量该怎么办?例如,以下代码是线程安全的吗? 因此,如果我有两个线程连续且同时调用此方法,一个带狗(例如“大丹狗”和“斗牛犬”),另一个带猫(例如“波斯”和“暹罗”)的猫,我将得到猫和狗在同一阵列中?还是猫和狗永远不会同时处于该方法的同一调用中? 问题答案: 此方法是100%线程安

  • 问题内容: Java静态编译器(javac)内联一些静态最终变量,并将值直接带到常量池中。考虑以下示例。A类定义了一些常量(公共静态最终变量): B类使用以下常量: 当您编译类B时,javac从类A获取这些常量的值,并在B.class中内联这些值。结果,在编译时必须将类A的依赖项B从字节码中删除。这是一个非常特殊的行为,因为在 编译时 要烘焙这些常量的值。您可能会认为这是JIT编译器在运行时可以做

  • 本文向大家介绍读取Java类中的静态成员的步骤是什么?,包括了读取Java类中的静态成员的步骤是什么?的使用技巧和注意事项,需要的朋友参考一下 静态变量是在类加载时甚至在执行静态块之前创建的,并且静态块的目的是为静态变量赋值。静态变量存储在其定义的类的所有实例之间共享的值,而静态块是在首次加载类时执行的代码部分。如果我们希望在类加载时需要执行任何逻辑,则需要将该逻辑放在静态块中,以便在类加载时执行