访问方法中的修饰符

时间:2014-07-17 20:05:11

标签: java methods access-modifiers

对Java方法中声明的变量使用访问修饰符(public / private / protected)是绝对非法吗?是否有任何例外情况允许我们对方法中声明的变量使用访问修饰符?

示例1:

public class myclass
{
  public static void main (String[] args)
  {
    public int number = 0; //This will cause an error (illegal start of expression)
  }

}

示例2:

public class myclass
{
  public static void main (String[] args)
  {

  }
  public static void myMethod()
  {
    public int number = 0; //This will cause an error (illegal start of expression)
  }
}

对于许多人来说这个问题可能听起来很简单,但我想知道在方法中我们不能使用访问修饰符是多么绝对。这绝对不可能吗?

2 个答案:

答案 0 :(得分:2)

是的,本地变量具有任何访问修饰符是非法的:publicprotectedprivate

JLS, Section 14.4定义了可以作为局部变量声明的一部分,并且它不包含访问修饰符:只有注释和/或final

  

LocalVariableDeclaration:

     

{VariableModifier} UnannType VariableDeclaratorList

  

VariableModifier:

     

注释最终

此外,局部变量'范围已经限制在他们宣布的区块内。

答案 1 :(得分:1)

局部变量在它们创建的范围内始终可见,访问修饰符在那里没有任何意义。没有允许的情况或特殊情况。

访问修饰符只能应用于实例或类级别的变量。

您可以检查JLS以获取局部变量声明的规范,以确保语法规则永远不允许这样做:

  

局部变量声明语句声明一个或多个局部变量名称。

...
LocalVariableDeclaration:
    VariableModifiersopt Type VariableDeclarators

VariableModifiers:
    VariableModifier
    VariableModifiers VariableModifier

VariableModifier: one of
    Annotation final
...

在这里,您清楚地看到final是除注释之外的唯一允许的局部变量。