当前位置: 首页 > 面试题库 >

Java中的作用域规则

呼延烈
2023-03-14
问题内容

有人可以帮助我了解Java中的范围规则吗?这显然是无效的:

    {
        int i = 0;
        System.out.println(i); // fine, of course
    }
    System.out.println(i); // syntax error

i在内声明,在{}外部不可用。那么呢:

    for (int i = 0; i < 10; i++) {
         System.out.println(i); // fine, of course
    }
    System.out.println(i);  // syntax error, same as above.

我对这里的语法错误感到惊讶。i在外部作用域中声明,但以后将不可用。它是否通过某些特殊的for循环规则绑定到内部块作用域?还有其他可能发生这种情况的情况吗?


问题答案:

想想for循环实际上是这样表示的:

{
  int i = 0;
  while (i < 10) {
    // your code
    i ++
  }
}


 类似资料:
  • 作用域在所有权(ownership)、借用(borrowing)和生命周期(lifetime)中起着重要作用。也就是说,当借用有效,当资源可以释放,还有当变量被创建或销毁时,作用域都在指导编译器(原文:That is, they indicate to the compiler when borrows are valid, when resources can be freed, and whe

  • Rust 的变量不只是在栈中保存数据:它们也占有资源,比如 Box<T> 占有堆中的内存。Rust 强制实行 RAII(Resource Acquisition Is Initiallization,资源获取即初始化),所以任何一个对象在离开作用域时,它的析构器(destructor)都被调用以及它的资源都被释放。 这种行为避免了资源泄露(resource leak)的错误,所以你再也不用手动释放

  • 程序中一个标识符有意义的部分称为其作用域。例如,块中声明局部变量时,其只能在这个块或这个块嵌套的块中引用。一个标识符的4个作用域是函数范围(function scope)、文件范围(filescope)、块范围(block scope)和函数原型范围(function-prototype scope)。后面还要介绍第五个——类范围(class scope)。 任何函数之外声明的标识符取文件范围。这

  • 本文向大家介绍Python中的作用域规则详解,包括了Python中的作用域规则详解的使用技巧和注意事项,需要的朋友参考一下 Python是静态作用域语言,尽管它自身是一个动态语言。也就是说,在Python中变量的作用域是由它在源代码中的位置决定的,这与C有些相似,但是Python与C在作用域方面的差异还是非常明显的。 接下来会谈论Python的作用域规则,在这中间也会说明一下Python与C在作用

  • 问题内容: 所有疯狂的Java范围界定规则都使我垂头丧气,而 公共静态无效的 废话无济于事。到目前为止,我所使用的所有编程语言都是词法作用域或它的某种近似,而没有任何访问修饰符,即内部内容捕获外部内容,只要内部内容存在,就可以访问外部内容。 那么,如何理解Java内部类的作用域规则?他们是否可以访问在外部类中声明的变量,或者由于所有 公共静态私有 事物在周围徘徊,我是否有必要担心一些奇怪的情况?

  • 多数情况下,我们更希望访问数据本身而不需要取得它的所有权。为实现这点,Rust 使用了借用(borrowing)机制。对象可以通过引用(&T)来传递,从而取代通过值(T)来传递。 编译器静态地保证了(通过借用检查器)引用总是(always)指向有效的对象。也就是说,当存在引用指向一个对象时,该对象不能被销毁。 // 此函数拥有 box 的所有权并销毁它 fn eat_box_i32(boxed_i