为什么final是Java中局部变量的唯一修饰符?

为什么final是Java中局部变量的唯一修饰符?,java,jvm,Java,Jvm,此处唯一适用的修饰符为final对于其他修饰符,程序会给出编译器错误。为什么呢?请详细解释 简言之,在这种情况下,其他修饰符都没有意义。在方法退出后将超出范围(并被垃圾收集)的局部变量上下文中,将变量称为公共、私有、受保护、或静态,根本没有意义。这些修饰符用于类字段(和方法),以定义它们的可见性(或者在静态的情况下,定义它们的范围) final是唯一在局部变量上下文中有意义的声明,因为它意味着变量在初始声明后无法修改,它与访问控制无关。请考虑所有这些声明都是局部变量声明 有关更多详细信息,请始终

此处唯一适用的修饰符为final对于其他修饰符,程序会给出编译器错误。为什么呢?请详细解释

简言之,在这种情况下,其他修饰符都没有意义。在方法退出后将超出范围(并被垃圾收集)的局部变量上下文中,将变量称为
公共
私有
受保护
、或
静态
,根本没有意义。这些修饰符用于类字段(和方法),以定义它们的可见性(或者在
静态的情况下,定义它们的范围)


final
是唯一在局部变量上下文中有意义的声明,因为它意味着变量在初始声明后无法修改,它与访问控制无关。

请考虑所有这些声明都是局部变量声明

有关更多详细信息,请始终转到可以组成局部变量的状态

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;
    }
}
在哪里


因此唯一可接受的
变量修改器
final
(以及一个注释,这是很少见的)。

我相信这是因为其他修饰符应用于类而不是方法

私有、受保护或公共修饰符会影响全局变量对其他类对象的可见性,因此对局部变量使用这些修饰符是不明智的

静态修饰符将全局变量声明为属于类而不是类的对象,因此将它们用于局部变量也没有意义


唯一有意义的修饰符是“final”,它可以确保局部变量在方法中不发生变化。

因为这些是局部变量,是
main
方法的局部变量。在这种情况下,只有
final
有意义。其他修饰符在函数中。静态方法中不能有非静态变量。请不要忘记
volatile
transient
:)
静态
C
iirc中局部变量的有效修饰符。int a=60<代码>静态
有点道理,其他编程语言允许它在局部变量上表示,在函数退出后,变量在下次调用时保留其值。我个人认为使用这个功能是可怕的实践。AJB其他语言允许它(我相信C++是一个),但是使用它是一个可怕的实践。虽然没有一种语言能够完全消除所有可怕的编程实践(让它成为白痴证明,有人会成为更好的白痴),但Java的设计者尽其所能消除尽可能多的编程实践。
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