#define爪哇语
2022-08-31 12:30:35
我开始用Java编程,我想知道是否存在与C++等效的。#define
快速搜索谷歌说它没有,但谁能告诉我Java中是否存在类似的东西?我试图使我的代码更具可读性。
例如,我希望能够写作。myArray[0]
myArray[PROTEINS]
我开始用Java编程,我想知道是否存在与C++等效的。#define
快速搜索谷歌说它没有,但谁能告诉我Java中是否存在类似的东西?我试图使我的代码更具可读性。
例如,我希望能够写作。myArray[0]
myArray[PROTEINS]
不,因为没有预编译器。但是,在您的情况下,您可以实现相同的目标,如下所示:
class MyClass
{
private static final int PROTEINS = 0;
...
MyArray[] foo = new MyArray[PROTEINS];
}
编译器会注意到永远不会改变,因此会内联它,这或多或少是你想要的。PROTEINS
请注意,常量上的访问修饰符在这里并不重要,因此,如果要在多个类中重用相同的常量,它可以是私有的,也可以代替私有的。public
protected
注释空间太小,所以这里有一些关于使用.正如我在对Andrzej的答案的评论中所说,只有原始的并且作为文字直接编译到代码中。要演示这一点,请尝试以下操作:static final
String
您可以通过创建三个类(在单独的文件中)来查看其实际效果:
public class DisplayValue {
private String value;
public DisplayValue(String value) {
this.value = value;
}
public String toString() {
return value;
}
}
public class Constants {
public static final int INT_VALUE = 0;
public static final DisplayValue VALUE = new DisplayValue("A");
}
public class Test {
public static void main(String[] args) {
System.out.println("Int = " + Constants.INT_VALUE);
System.out.println("Value = " + Constants.VALUE);
}
}
编译这些并运行测试,这将打印:
Int = 0
Value = A
现在,更改为对每个类都有不同的值,并且只编译类。再次执行(不重新编译类文件)时,它仍会打印 的旧值,但不会打印 。例如:Constants
Constants
Test
INT_VALUE
VALUE
public class Constants {
public static final int INT_VALUE = 2;
public static final DisplayValue VALUE = new DisplayValue("X");
}
运行测试而不重新编译 :Test.java
Int = 0
Value = X
请注意,与 一起使用的任何其他类型都保留为引用。static final
与 C/C++ / 类似,在常规 Java 条件中使用常量文本或通过基元定义的文本,其计算结果将导致编译器剥离块中语句的字节码(不会生成它们)。#if
#endif
static final
if
false
if
private static final boolean DEBUG = false;
if (DEBUG) {
...code here...
}
“...代码在这里...”不会编译成字节码。但是,如果您更改为,那么它将是。DEBUG
true