Java中静态和非静态前向引用的内部工作
作者:互联网
我正在使用Java中的前向引用,并想知道为什么Java允许使用ClassName(在静态变量中)或在实例变量的情况下使用此引用进行前向引用? JVM级别的后台进程是什么?例如:
静态前向参考 –
class StaticForwardReferences {
static {
sf1 = 10; // (1)
int b = sf1 = 20; // (2)
int c = StaticForwardReferences.sf1; // (3) Works fine
// Above statement allows the allocation of value of 'sf1'
// to variable 'c' just because it is accessed with class name
// instead of direct name
// whereas below statement throws illegal forward reference
// error at compile time
System.out.println(sf1); // (4) Illegal forward reference
}
static int sf1 = sf2 = 30;
static int sf2;
public static void main(String[] args) {}
}
有什么样的临时存储,当我们通过在上面的(1)和(2)步骤中的声明之前分配变量来进行前向引用时存储值,如果我们打印变量c的值,它会显示从最近的任务到sf1的价值.
非静态前向参考 –
class NonStaticForwardReferences {
{
nsf1 = 10;
System.out.println(this.nsf1); // 10
nsf1 = sf1;
// System.out.println(nsf1); Illegal forward reference
int b = nsf1 = 20;
int c = this.nsf1;
System.out.println(c); // 20
// why variable 'c' is initialized to 20 when used with 'this' reference
// instead of showing illegal forward reference, how it works in the background?
}
int nsf1 = nsf2 = 30;
int nsf2;
static int sf1 = 5;
public static void main(String[] args) {}
}
请详细说明上述两种情况下幕后发生的背景过程.提前致谢!
标签:java,static,non-static,forward-reference 来源: https://codeday.me/bug/20190701/1348037.html