【问题标题】:OOP: Bounds of a variable's scopeOOP:变量范围的边界
【发布时间】:2016-10-22 02:01:59
【问题描述】:

考虑下面的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 行)。

但这也引发了以下问题:是否为一段代码中的所有变量通用定义范围(基本上范围由括号定义),还是为每个变量独立定义?

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

【问题讨论】:

  • 5 到 6。范围从变量声明开始。如果您在函数/方法中声明它,则它仅在此函数/方法中可见。如果您在类中声明它,则每个类成员(此类中的函数/方法)都可以使用它。对于类范围的变量,也可以在 Google 上搜索 publicprotectedprivate

标签: oop variables scope computer-science principal


【解决方案1】:

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

还有Java Language Spec

每个引入名称的声明都有一个范围(第 6.3 节),它是程序文本的一部分,在该范围内,声明的实体可以通过一个简单的名称来引用。

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

至于你的具体问题。

范围是为一段代码中的所有变量通用定义的(基本上范围由括号定义)

没有,但是

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

为每个变量独立定义

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

变量 c 的范围存在于哪几行? 2-7 行还是 5-6 行?

现在是 5-6。如果你在第 3 行写System.out.println(c) 之类的东西,编译器会显示一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2013-04-05
    • 2023-01-12
    • 2012-09-03
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多