范围内的Java范围

时间:2015-11-30 13:42:43

标签: java

我已经多次看到这样的代码,开发人员在范围内创建范围。

enter image description here

我能想到的原因很少:
1.隐藏封装范围的变量,隔离它们。 (也允许声明具有相同名称的变量)
2.允许在范围1中分配的内存在关闭时进行垃圾回收。

但是我不认为任何这些都足以做到这一点......

这样做有什么意义?

1 个答案:

答案 0 :(得分:1)

作为Java Language Specification

  

声明的范围是程序的范围   声明声明的实体可以使用a来引用   简单名称,只要它是可见的(§6.4.1)。

换句话说,范围仅限制源代码中名称的使用。它对运行时行为没有影响,因此对垃圾收集没有影响。

您的第一个建议或多或少是使用block的唯一原因。但有时候它太麻烦了。就个人而言,我可能会在我编写的代码中使用过一两次。

垃圾收集部分由finalization of class instances定义。该章讨论可达性

  

reachable对象是任何可以访问的对象   从任何实时线程继续计算。

JVM无法收集此类对象。

JLS还提到了

  

可以设计优化程序的转换以减少   可达的对象数量小于那些对象的数量   天真地被视为可达。例如,Java编译器或   代码生成器可以选择设置一个不会的变量或参数   更长时间用于null以使这样的对象存储   可能会更快回收。

这也在

的答案中讨论过