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

Java 为什么公共类和main()方法中的变量总是需要是“final”,java,Java,为什么在公共类和main方法中总是变量必须是final。代码如下: public class A { public static void main(String args[]) { final int a; } } 在上面的代码中,变量不能是public、private或final以外的任何东西。你能告诉我为什么吗。谢谢。这是一个局部变量。只有实例或静态变量可以具有访问修饰符 例如,一个实例变量: public class A { private int a;

为什么在公共类和main方法中总是变量必须是final。代码如下:

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

在上面的代码中,变量不能是public、private或final以外的任何东西。你能告诉我为什么吗。谢谢。

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

例如,一个实例变量:

public class A {

   private int a;

   public static void main(String args[]){
   }
}
为什么在公共类和主方法中总是变量必须是最终变量


没有。它是一个方法局部变量,因此它不能有任何访问修饰符,但它可以是final或non-final。它与封闭类是公共的或封闭方法是主的无关。这只是因为它是一个局部变量。只有成员变量可以有访问修饰符。

根据java,局部变量只允许提供最终访问权限,它不会是公共的、私有的或任何东西。声明的变量位于main方法内部,因此它是局部变量。您可以只为局部变量指定final。

它不必是final


它不能是公共的或私有的,因为它是主方法范围内的局部变量。公共或私人在这里没有意义。它们只能用于变量。

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

在任何类中,所有变量都必须是最终变量,而不仅仅是公共类,这一点都不是必需的。有时,您可能需要确保变量的值在一段时间内不会被修改,因此您可以将其标记为final


如果由多个线程共享,将成员变量作为最终变量也可以确保它们是线程安全的。

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

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

在您的例子中,您在main方法内部定义了一个,这意味着它获取方法范围,并且只有main方法内部的代码知道a

Final不是作用域,但它意味着您不能在分配新值后将其分配给

有关更多信息,请参阅有关Java中作用域的信息。

反驳 进入main函数内部,声明一个没有final关键字的变量

证明为什么在公共类和main方法中总是变量需要是final的说法是错误的

通过反例证明不成立

对于public和private:只有方法外部的实例变量可以是public或private。像这样:

public MyClass
{
   private boolean thisIsMadness;
   public int thisIsSparta;

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

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

您在哪里读到这样的规则?这是完全错误的,因为。。。。。。。不是,不是这样的谢谢你的评论。我在Eclipse中编程时发现了这一点,每次我创建类和main方法时,它都会要求我给在其中创建的变量指定final as修饰符,如果我使用任何其他修饰符,就会抛出错误。所以我很困惑为什么会这样。我不认为问这个问题的人是错误的——他们说在他们的代码中变量不能是公共的或私有的是正确的。@Annie标题说“总是需要是最终的”,这在问题中重复。这可能是也可能不是OP的意思,但这绝对是他所说的。到目前为止,所有其他答案都依赖于相同的解释。@Annie-如果你想声称EJP是错误的,你需要提供一个比这更令人信服的论点。记住,唯一被证明能读心术的人就是乔恩·斯基特!除非你能向我们展示你在遥感方面的资质。。。我们不会相信你的:-
public MyClass
{
   private boolean thisIsMadness;
   public int thisIsSparta;

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