【问题标题】:Why always a variable in public class and main() method is always need to be 'final' [closed]为什么公共类和 main() 方法中的变量总是需要是“最终的”[关闭]
【发布时间】:2014-01-04 20:50:15
【问题描述】:

为什么在公共类和 main() 方法中变量总是需要是 final 的。代码如下:

public class A {
  public static void main(String args[]) {
    final int a;
  }
}

在上面的代码中,变量不能是公共的、私有的,也不能是除了 final 的任何东西。你能告诉我为什么吗?谢谢。

【问题讨论】:

  • 你从哪里读到这样的规则?这是完全错误的。
  • 因为.......不是这样的
  • 感谢您的 cmets。我在 Eclipse 中编程时发现了这一点,每次创建类和主方法时,它都会要求我将 final 作为修饰符赋予在其中创建的变量,如果我使用任何其他修饰符,则会引发错误。所以我很困惑为什么会这样。

标签: java


【解决方案1】:

反驳

进入主函数,声明一个不带final关键字的变量。

public static void main(String [] args)
{
   int noFinalNeeded; 
}

证明“为什么变量在公共类和main()方法中总是需要final”false

被反例反驳


对于公共和私有:只有方法外的实例变量可以是公共的或私有的。像这样:

public MyClass
{
   private boolean thisIsMadness;
   public int thisIsSparta;

   public static void main(String [] args)
   {
      int cookie;
   }
}

【讨论】:

    【解决方案2】:

    为什么在公共类和main()方法中变量总是需要是final的

    它没有。它是一个方法局部变量,因此它不能有任何访问修饰符,但它可以是最终的或非最终的。它与封闭类为公共或封闭方法为main() 无关。只是因为它是一个方法局部变量。只有 member 变量可以有访问修饰符。

    【讨论】:

    • 我不认为提出问题的人是不正确的 - 他们说在他们的代码中变量不能是公共或私有的是正确的..
    • @Annie 标题说“总是需要是最终的”,并在问题中重复。这可能是 OP 的意思,也可能不是,但绝对是他所说的。到目前为止,所有其他答案都依赖于相同的解释。
    • @Annie - 如果你想声称 EJP 不正确,你需要提供一个比这更有说服力的论据。请记住,SO 上唯一经过验证的读心者是 Jon Skeet!除非你能向我们展示你在远程神经传感方面的资格......我们不会相信你的:-)
    【解决方案3】:

    public 或 private 是可以告诉其他人这些变量是否对他们可见的关键字。它们告诉变量的范围。 在方法块中,不需要使用public或private,因为'{}'具有能力。方法中的大括号已经告诉其他人这些变量仅在{和}之间可用。所以Java让'public'或'private'在方法中不合法

    【讨论】:

      【解决方案4】:

      这是范围的问题。 public 和 private 表示变量的范围,这基本上意味着谁可以看到它。

      Public 意味着任何拥有 A 实例的人都可以看到它的变量。私有意味着只有类 A 中的方法才能看到它。

      在您的情况下,您在 main 方法内部定义了 a,这意味着它获取方法范围,并且只有 main 方法内部的代码知道 a。

      Final 不是作用域,但这意味着一旦分配了新值,您就不能再为其分配新值。

      有关更多信息,here 是有关 Java 范围的信息。

      【讨论】:

        【解决方案5】:

        没有必要在任何类(不仅仅是公共)类中的所有变量都必须是最终的。有时您可能需要确保变量的值不会随着时间的推移而被修改,因此您可以将其标记为 final。

        如果被多个线程共享,也将成员变量设为 final 以确保它们是线程安全的

        【讨论】:

          【解决方案6】:

          方法中的变量没有自己的访问控制,您不能公开 Java 方法内部的变量。

          【讨论】:

            【解决方案7】:

            不一定是final

            它不能是publicprivate,因为它是main 方法范围内的局部变量。 publicprivate 在这里没有任何意义。它们只能用于member 变量。

            【讨论】:

              【解决方案8】:

              根据 java ,局部变量只允许最终访问,它不会是公共的、私有的或任何东西。声明的变量在main方法里面,所以是局部变量,只能给局部变量fi​​nal。

              【讨论】:

                【解决方案9】:

                它是一个局部变量。只有实例或静态变量可以有访问修饰符。

                例如一个实例变量:

                public class A {
                
                   private int a;
                
                   public static void main(String args[]){
                   }
                }
                

                【讨论】:

                  猜你喜欢
                  • 2015-12-17
                  • 2013-09-08
                  • 2012-06-02
                  • 2022-10-18
                  • 1970-01-01
                  • 2012-03-27
                  • 2012-12-28
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多