gpt4 book ai didi

java - Java 条件编译 : will compiler omit "always false" blocks from class?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:07 24 4
gpt4 key购买 nike

下面是我的代码片段:

class A { 

private boolean debug = false;

// Called when server boots up.
public void init (property) {
debug = property.getBoolean ("debug_var"); // read debug from a config file.
}

// some other function
public void foo () {
if (debug) {
System.out.println ("From inside the debug block");
}
}
}

当我运行代码时,如果配置文件中的 debug == true,if (debug) 实际上会打印出“From inside debug block”。

两个问题:

  1. 那么,在这种情况下,编译器是否只是因为变量 debug 的值可能会在运行时更改而将 if block 包含在 .class 文件中?

  2. 如果这是真的,那么在某些环境下,我如何才能避免将某些代码添加到 .class 文件中?

最佳答案

如果您必须这样做,大多数日志记录框架都有自己的方法来设置日志详细信息的级别,并且它们不会在运行时输出任何级别太低的日志语句。使用日志记录框架来正确执行此操作。

例如,使用内置的 java.util.logging 框架,您可以执行如下操作

Logger.getLogger("ThisClass").log(Level.FINE, "Log message");

仅当日志级别设置为 FINE 或更低时打印,但当日志级别设置为 CONFIG 或更低时将被忽略。

“条件编译”在 Java 中通常是没有意义的,但如果小心一些,JIT 会优化掉它可以确定永远不会执行的分支。

关于java - Java 条件编译 : will compiler omit "always false" blocks from class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10985991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com