在Java中,说我有以下内容
==fileA.java==
class A
{
public static final int SIZE = 100;
}
然后在另一个文件中使用此值
==fileB.java==
import A;
class b
{
Object[] temp = new Object[A.SIZE];
}
编译时,确实SIZE
将其替换为值100,因此,如果我要替换FileA.jar而不是FileB.jar,则对象数组将获得新值,还是将其硬编码为100,因为这是当它最初是建造的?
是的,Java编译器确实将静态常量值(如SIZE
您的示例中的值)替换为它们的文字值。
因此,如果您以后要SIZE
在类中进行更改A
但不重新编译类b
,则仍会在class中看到旧值b
。您可以轻松地对此进行测试:
文件A.java
public class A {
public static final int VALUE = 200;
}
文件B.java
public class B {
public static void main(String[] args) {
System.out.println(A.VALUE);
}
}
编译A.java和B.java。现在运行:java B
更改A.java中的值。重新编译A.java,但不重新编译B.java。再次运行,您将看到正在打印的旧值。
我想在将源代码传递给编译器之前,在编译时转换java源代码。换句话说,我想创建一个能够转换的预处理器 转换为任何其他代码,如: null 我很乐意为这两种方法找到一个java代码预处理的简单示例。 有没有人认为有什么聪明的方法来进行代码转换,而不是用多个ivy模块完全改变现有的大型代码库?注释似乎是最好的方法,但我不明白该怎么做。
当我使用ctrl+右键单击打开一个特定的类时,我应该被重定向到一个带有java源代码的窗口,该窗口包含所有行和适当的注释。但相反,我得到了一个带有反编译的。class文件的窗口。
问题内容: 将变量声明为的区别是什么 要么 如果我只希望变量是局部的,并且是常量(以后不能更改)? 谢谢 问题答案: 仅仅具有预期的效果。 声明static使其成为一个类变量,使其可以使用类名进行访问
我们目前在Java8中编译了代码,但我们在Java11 VM上运行它。现在我们也在尝试将代码移动到Java11编译时。想知道在Java8中编译代码与在Java11中编译代码在性能方面是否有任何好处,因为两个编译器都会生成不同的类文件(字节码)?在效率方面,一个与另一个有何不同?
问题内容: 我找到了一个代码,它声明了如下代码 它们之间有什么区别或相同?还是与或不同? 问题答案: 完全没有区别。根据 Java语言规范的8.3.1-类-字段修饰符, 如果两个或多个(不同的)字段修饰符出现在字段声明中,则按惯例(尽管不是必需的),它们的出现顺序与上面FieldModifier生产中所示的顺序一致。 对于字段,所述生产按以下顺序列出修饰符: 对于方法:
我们检查一下PHP语言中get_loaded_extensions()函数的输出,会发现有一些扩展并没有php.ini文件中调用,而它们确实也已经加载到PHP里去了,可以让我们在PHP语言中使用,如standard、Reflection、Core等。它们便是静态编译的,它们没有被编译成so或者dll文件供PHP动态调用,而是直接和PHP主程序编译到一起。 在*nix上执行静态编译 现在,先让我们执