什么是Java的范围

时间:2016-07-04 04:50:28

标签: java switch-statement

我刚刚开始编码。我想对同一个变量使用两次switch语句,我被告知要做到这一点,变量必须是'在范围内'。 作为初学者,我不知道这意味着什么。 那么范围是什么意思呢?并且,如果变量不在范围内,如何使其在范围内? 谢谢。

2 个答案:

答案 0 :(得分:1)

局部变量 1 在"范围内"如果代码可以访问它并且超出范围,如果它不能。在Java中,变量的作用域是它们声明的块({})。所以:

void foo() {
    int a = 42;

    if (/*some condition*/) {
        String q = "Life, the Universe, and Everything";

        // 1. Both `a` and `q` are in scope here
        System.out.println(a);
        System.out.println(q);
        if (/*another condition*/) {
            // 2. Both `a` and `q` are in scope here, too
            System.out.println(a);
            System.out.println(q);
        }
    }

    // 3. Only `a` is in scope here
    System.out.println(a);
    System.out.println(q); // ERROR, `q` is not in scope
}

注意上述(1),(2)和(3):

  1. 代码可以访问q,因为q在与代码相同的块中声明; tt可以访问a,因为它已在包含块中声明。

  2. 代码可以访问q,因为它在包含块中声明了;它可以访问a,因为它出现在下一个区块中。

  3. 代码可以访问a,但不能访问q,因为q未在块或任何块(或其他几个块)中声明包含它的东西。

  4. 在确定哪个不合格的标识符(例如上面的aq,而不是foo中的this.footoLowerCaseq.toLowerCase时1}},它们是限定),Java编译器将逐个查看这些位置,直到找到匹配项:

    • 对于最里面的块中具有该名称的变量
    • 对于下一个区块中具有该名称的变量,依此类推
    • 对于当前班级中具有该名称的字段 2 方法(通常为:成员)< / LI>
    • 对于已导入的包中具有该名称的类
    • 对于具有该名称的包

    该列表还有其他几个(我不打算用初学者进入静态导入)。

    范围还有很多,我建议您完成一些教程和/或一本Java教程。

    1 &#34;局部变量&#34; vs.&#34;变量&#34; - Java Language Specification使用&#34;变量&#34;比大多数人在普通演讲中做的更普遍。当我说&#34;变量&#34;在这个答案中,我的意思是JLS称之为&#34; 本地变量&#34;。

    2 &#34; field&#34; - JLS调用字段&#34;变量&#34;在某些地方(和#34;领域&#34;在其他地方),因此(1)在上面。 : - )

答案 1 :(得分:0)

来自Section 6.3 of the Java Language Specification

  

声明的范围是程序的一个区域,只要它是可见的,就可以使用简单的名称引用声明声明的实体。

scope 的概念适用于Java中的多种实体:从局部变量到顶级类和包的所有内容。即使只讨论变量,也有很多情况,从局部变量到另一个类的静态导入字段到catch语句的try子句中的异常处理程序的参数。有关详细信息,请阅读JLS或在Web上搜索&#34; Java范围&#34;并阅读有关该主题的许多教程中的一个或多个。