编程语言
首页 > 编程语言> > Java中静态和非静态前向引用的内部工作

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