内部类访问局部变量为什么要用final修饰

简介:

/**

 * 内部内访问的局部变量必须加final修饰符,因为方法入参里面的局部变量生命周期在方法体之内,而内部类的生命周期是成员级别的
 * 如果不加final关键字:那么当myRun方法执行完成之后name的生命周期就结束了
 * 如果加上final关键字:内存中就会保存一份该内部变量的副本,当内部类访问时其实访问的是这个副本,
 * 实际上:内部类会将这个局部变量复制为它本身的一个成员变量,就相当于把局部变量的生命周期延长了
 */
public static void myRun(final String name){
    new Thread(){
        public void run(){
            try
            {
                Thread.sleep(1000);
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            
            System.out.println(name);
        }
    }.run();
}
目录
相关文章
|
8月前
final修饰的变量有三种
final修饰的变量有三种
100 0
|
5月前
|
安全 Java
synchronized修饰普通方法和静态方法的区别
在Java多线程中,`synchronized`关键字用于同步机制,确保线程安全。修饰普通方法时,同步基于对象实例,仅同步访问同一对象的方法调用,不同对象间互不影响。修饰静态方法时,则基于类级别,所有对象访问同一静态方法时会互相阻塞。前者适合保护对象状态,后者适用于类级资源同步。需注意,修饰静态方法可能会影响并发性能。实际应用中应根据需求选择适当的同步策略,以平衡程序正确性和效率。
|
2月前
|
Java
被final修饰的类的所有方法都不能被重写吗
在Java中,被`final`修饰的类不能被继承,因此其所有方法也不能被重写。`final`关键字确保了类的定义和行为不会被子类改变。
112 1
|
6月前
成员变量、局部变量和静态变量的区别
成员变量、局部变量和静态变量的区别
33 0
|
8月前
|
存储 监控 编译器
【C++】static关键字及其修饰的静态成员变量/函数详解
【C++】static关键字及其修饰的静态成员变量/函数详解
214 3
|
8月前
|
编译器
static关键字修饰成员变量与成员函数
1. static概念 声明 为static的类成员称为类的静态成员,用static修饰的成员变量,称为静态成员变量;用static修饰的成员函数,称为静态成员函数,都存放在堆区。 静态成员变量一定要在类外进行初始化。
141 0
|
存储 Java
浅谈匿名内部类和局部内部类只能访问final变量
浅谈匿名内部类和局部内部类只能访问final变量
100 0
关于static修饰的成员方法成员成员变量的相关讨论
关于static修饰的成员方法成员成员变量的相关讨论
|
Java
3.1 内部类的类型:成员内部类
3.1 内部类的类型:成员内部类
76 0
构造函数被private修饰后只能通过静态方法获得实例
构造函数被private修饰后只能通过静态方法获得实例
97 0