class Test {
public static void main(String[] args) {
private int x = 10;
public int y = 20;
protected int z = 30;
static int w = 40;
final int i = 50;
}
}
此处唯一适用的修饰符为最终; 对于其他修饰符,程序会提供编译器错误。这是为什么?请详细解释。
答案 0 :(得分:10)
简而言之 - 在这种情况下,其他任何修饰语都没有意义。说变量public
,private
,protected
或static
只是在超出范围的局部变量的上下文中没有意义(并且是垃圾收集)一旦方法退出。这些修饰符用于类字段(和方法),以定义它们的可见性(或static
的范围)。
final
是唯一一个在局部变量的上下文中有意义的,因为它意味着变量在初始声明后不能被修改,它与访问控制无关。
答案 1 :(得分:0)
考虑所有这些声明都是局部变量声明。
有关更多详细信息,请始终转到Java Language Specification,其中指出局部变量可以由
组成LocalVariableDeclarationStatement:
LocalVariableDeclaration ;
LocalVariableDeclaration:
VariableModifiersopt Type VariableDeclarators
,其中
VariableModifiers:
VariableModifier
VariableModifiers VariableModifier
VariableModifier: one of
Annotation final
VariableDeclarators:
VariableDeclarator
VariableDeclarators , VariableDeclarator
VariableDeclarator:
VariableDeclaratorId
VariableDeclaratorId = VariableInitializer
VariableDeclaratorId:
Identifier
VariableDeclaratorId []
VariableInitializer:
Expression
ArrayInitializer
所以唯一可接受的VariableModifier
是final
(和注释,很少见)。
答案 2 :(得分:0)
我相信这是因为其他修饰符适用于类而不是方法。
private,protected或public修饰符会影响全局变量对其他类对象的可见性,因此将这些修饰符用于局部变量是非语义的。
静态修饰符声明一个全局变量属于一个类而不是一个类的对象,因此将它们用于局部变量也没有意义。
唯一有意义的修饰符是“final”,它确保局部变量不会在方法中发生变化。