OOP:变量范围的边界

OOP: Bounds of a variable's scope

考虑以下 java 代码:

public class Main() {                           //Line 1
    public static void main(String[] args) {    //Line 2
        System.out.println("Hello World.");     //Line 3
                                                //Line 4
        int c = 10;                             //Line 5
        System.out.println(c);                  //Line 6
    }                                           //Line 7
}                                               //Loin 8

变量c的作用域在哪几行?第 2-7 行或第 5-6 行?

这提出了变量作用域是否可以先于变量声明本身的问题。潜在地,可以将范围定义为可以使用变量的代码区域(第 5-6 行)。

但这也引发了一个问题,即作用域是为一段代码中的所有变量定义的(基本上是用括号定义的作用域)还是为每个变量独立定义的?

范围的正确解释是什么,这种解释的理由是什么?

变量作用域定义了可以访问变量的代码部分。 Java 有几个不同的范围。你问的是local variable block scope。 Java 有其他范围,如 class scope.

还有Java Language Spec.

Every declaration that introduces a name has a scope (§6.3), which is the part of the program text within which the declared entity can be referred to by a simple name.

所以这不仅仅是关于变量。 类 也受此约束(例如 inner classes)。

至于你的具体问题。

scope is defined generically for all the variable's in a section of code (basically scope being defined by brackets)

没有,但是

  • 一些括号中定义的变量在外面是不可见的
  • 括号内不能定义两个同名变量

defined for each variable independently

每个自己的变量在定义之前对代码不可见,所以每个范围都不同

On what lines does the scope of variable c exist? Lines 2-7 or Lines 5-6?

5-6。如果您在第 3 行中编写类似 System.out.println(c) 的内容,编译器将向您显示错误。