使用全局变量

时间:2011-02-01 14:30:41

标签: java variables

为什么当我阅读其他代码时,我经常看到广泛使用“全局变量”?

例如在Java代码中:

public class SomeClass {
   Button btn1;
   private void someMethod() {
       btn = new Button();
   }
}

btn1被声明为“全局”和“方便”变量,可用作整个班级的轻松访问。但是当它没有修饰符时,它默认为Java中的默认访问。

这可能是安全隐患吗?如果他们只计划在一个特定的类中使用它们,为什么不立即用私有修饰符声明它们呢?

6 个答案:

答案 0 :(得分:5)

它不是全局变量(Java中是否存在这样的东西?我想这取决于一个人对 global 的定义)。它仍然是一个集体成员。

The default visibility is package-private,因此该变量不是公共的,但可以被同一个包中的其他类访问。​​

通常情况下,应该努力实现“最佳”数据封装,但可能存在适当的用例。

答案 1 :(得分:3)

  1. btn1不是全局变量。它是类
  2. 的实例变量
  3. 如果未指定访问修饰符,则默认为“包”级访问,即属于与SomeClass相同的包的所有类都可以访问btn1
  4. 如果SomeClass只是一个数据持有者而且是不可变的(没有setters等)那么这就完全可以了。
  5. 当谈到实例变量时,最好是尽可能地限制它。

答案 2 :(得分:3)

这不是一个全局变量。它具有默认访问权限,因此它不是全局可见的,而且它是实例成员,这意味着它的作用域是SomeClass的实例。与Java中的全局变量最接近的等价物是公共类中的公共静态字段。即使在这种情况下,它只是你正在使用的容器类的类加载器的全局 - 在同一个JVM中运行的另一个类加载器并加载相同的容器类将有一个单独的静态变量。

说完所有这些之后,我个人不赞成除了私人之外的任何领域,以帮助封装。 (当然,这并没有给你自己封装,但它只是一个开始。)字段是类的实现的一部分,它应该是可修改的,不会影响任何人只依赖于<这个类的em> API 。

答案 3 :(得分:1)

私有/公共与安全无关,它是用你的代码限制范围/用法。

然而,将它们称为应该是这样的好习惯:所以如果它们应该是私有的,那么将它们设为私有。

答案 4 :(得分:1)

java中没有“global”这样的东西。只有公共,私有,受保护和默认。对于类变量,默认通常不赞成,因为它破坏了封装。

  

如果人们只计划在一个特定的课程中使用私人修改器,为什么不立即用私人修改器声明它们呢?

*因为他们无知/不关心/顽皮/外出来惹恼你+

*适当删除 +只有conspiricy理论家

答案 5 :(得分:1)

如果你的问题是

  

为什么不立即用私人修改器声明它们

然后我的回答是:因为他们很懒惰。