对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)
}
}
对于许多人来说这个问题可能听起来很简单,但我想知道在方法中我们不能使用访问修饰符是多么绝对。这绝对不可能吗?
答案 0 :(得分:2)
是的,本地变量具有任何访问修饰符是非法的:public
,protected
或private
。
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
是除注释之外的唯一允许的局部变量。