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

时间:2013-12-17 07:24:33

标签: java

为什么变量必须在public class和main()方法中是最终的。这是代码:

public class A {

    public static void main(String args[]){

        final int a;

    }
}

在上面的代码中,变量不能是public,private或者除final之外的任何东西。你能告诉我原因吗?感谢。

9 个答案:

答案 0 :(得分:3)

  

为什么变量必须在公共类和main()方法中是最终的

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

答案 1 :(得分:0)

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

例如实例变量:

public class A {

   private int a;

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

答案 2 :(得分:0)

根据java,局部变量只允许最终访问,不会是公共,私有或任何东西。声明的变量在main方法内部,因此它是局部变量。您只能给最终的局部变量。

答案 3 :(得分:0)

不一定是final

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

如果由多个线程共享,那么将成员变量设为最终确保它们是线程安全的

答案 6 :(得分:0)

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

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

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

最终不是范围,但这意味着一旦分配了新值,就无法为其分配。

有关详细信息,here是有关Java范围的信息。

答案 7 :(得分:0)

进入main函数,声明一个没有final关键字的变量。

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

证明语句“为什么变量必须在公共类和main()方法中是最终的” false

反例反驳


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

public MyClass
{
   private boolean thisIsMadness;
   public int thisIsSparta;

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

答案 8 :(得分:0)

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