Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 全局变量的使用_Java_Variables - Fatal编程技术网

Java 全局变量的使用

Java 全局变量的使用,java,variables,Java,Variables,为什么我在阅读其他代码时经常看到“全局变量”的广泛使用 例如,在Java代码中: public class SomeClass { Button btn1; private void someMethod() { btn = new Button(); } } btn1被声明为“全局”和“方便”变量,以便在整个类中轻松访问。但当它没有修饰符时,它默认为Java中的默认访问 这可能是安全风险吗?如果人们只打算在一个特定的类中使用私有修饰符,为什么不立即用私有修饰符

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

例如,在Java代码中:

public class SomeClass {
   Button btn1;
   private void someMethod() {
       btn = new Button();
   }
}
btn1
被声明为“全局”和“方便”变量,以便在整个类中轻松访问。但当它没有修饰符时,它默认为Java中的默认访问

这可能是安全风险吗?如果人们只打算在一个特定的类中使用私有修饰符,为什么不立即用私有修饰符声明它们呢?

它不是全局变量(Java中是否存在这种情况?我想这取决于对全局变量的定义)。它仍然是一名班级成员

,因此该变量不是公共的,但可以由同一包中的其他类访问


通常情况下,人们应该努力实现“最佳”数据封装,但在某些情况下,这可能是合适的。

私有/公共与安全无关,而是限制代码的范围/使用

尽管如此,最好按它们应该的样子称呼它们:因此,如果它们应该是私有的,就将它们设为私有。

java中没有“全局”这样的东西。只有public、private、protected和default。对于类变量,默认值通常是不受欢迎的,因为它破坏了封装

如果人们只打算在一个特定的类中使用它们,为什么不立即用private修饰符声明它们呢

*因为他们无知/不在乎/顽皮/想惹你生气+

*酌情删除 +阴谋论理论家

  • btn1不是全局变量。它是类的一个实例变量
  • 如果未指定访问修饰符,则默认为“包”级访问,即btn1可供与SomeClass属于同一包的所有类访问
  • 如果某个类只是一个数据保持器和不可变(没有设置器等),那么这是完全可以的
  • 当涉及到实例变量时,最好尽可能多地限制

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

    说了所有这些,我个人不赞成字段不是私有的,以帮助封装。(当然,这并不能单独提供封装,但这只是一个开始。)字段是类实现的一部分,应该可以修改,而不会影响仅依赖类API的任何人。

    如果您的问题是

    为什么人们不马上用私有修饰语声明它们呢


    我的答案是:因为他们懒惰。

    我不知道这些“人”是谁,我总是将我的领域声明为私有,除非我有很好的理由不这样做。我想很难回答为什么有些人这样做,我们不知道他们的级别;)一般来说,您是对的,它可能会导致错误请使用一个标题,这是一个问题(可以回答),例如,“出于什么原因,我应该使用默认访问修饰符而不是private?”在Java中,最接近全局变量的可能是不是
    final
    public static
    变量
    public static
    是全局的,即使引用是不可变的。@Steve:如果它是
    final
    ,那么我不会称它为“变量”,而是一个常量(是的,类型可能是可变的…)。在Java中,final变量仍然被称为变量。SteveKuo当然,但是@JoachimSauer说的是Java中的“最接近全局变量的东西”。因为Java没有“全局变量”,所以没有理由假设Java所称的“变量”(例如,最终变量)必须符合其他人所称的“全局变量”的条件“我完全不同意第4条。我认为最好是尽可能限制变量:通常将它们设置为私有,如果可以将它们设置为
    final
    ,那么就这样做。@Jon Skeet-我的错,我想在这里多说些……英语不是第一语言;-)“如果某个类只是一个数据持有者”,并且
    btn1
    是不可变的,那么它应该声明为
    final
    。正如现在的代码一样,同一个包中的类可以修改
    SomeClass
    btn1