繁体   English   中英

Java 11 变量 scope

[英]Java 11 Variable scope

我有一个与变量声明和使用 with 块相关的问题。

public class Var {
    {
        b = 60;
    }
    
    public static void main(String[] args) {
        Var v = new Var();
        System.out.println("Value " + v.b);
    }
    int b=50;
}

Output 是:

Value 50

但是如果我在块之前声明一个变量:

public class Var {
    int b=50;
    {
        b=60;
    }
    
    public static void main(String[] args) {
        Var v =new Var();
        System.out.println("Value " + v.b);
    }
}

那么output的值就是60,为什么我在block后面写的时候b的值没有变化呢?

以下是JLS的摘录:

static 初始化器和 class 变量初始化器按文本顺序执行......

下面给出的是初始化的总体顺序:

  1. 顺序为static 个变量和 static 个初始化器
  2. 顺序中的实例变量和实例初始值设定项
  3. 建设者

所以,顺序很重要。 在您的情况下,第 2 点适用。 这就是为什么 output 在第一种情况下为 50 而在第二种情况下为 60 的原因。

您也可以查看相关教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM