内部类中访问的局部变量需用final修饰的原因

来源:互联网 发布:免费购物的软件 编辑:程序博客网 时间:2024/06/14 15:58

此处的内部类指局部内部类(包括匿名内部类),因为只有局部内部类才可访问局部变量,普通非静态内部类和静态内部类不可能访问方法体内的局部变量。

需用final修饰的原因:

对于局部变量,作用域为该方法内,方法执行结束该局部变量也随之消失。但内部类可能会产生隐式的“闭包”,闭包使局部变量脱离它所在的方法继续存在。

public class ClosureTest{    public static void main(String[] args)    {        final String str = "Java";        new Thread(new Runnable() {            public void run() {                for(int i = 0; i < 100; ++i)                    System.out.println(str + " " + i);                try                {                    Thread.sleep(100);                } catch (InterruptedException e)                {                    e.printStackTrace();                }            }        }).start();//此处执行完,main方法结束。但只要线程的run()未执行完,str的生命周期就没结束。    }}
上例中内部类扩大了局部变量的作用域,若没用final修饰,也即变量的值可以随意改变,将会引起混乱。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 git本地分支比远程高怎么办 娃儿上嘴唇里面破了怎么办 错过了各大招聘怎么办 优秀团员申请表没有获奖情况怎么办 大学生毕业学生登记表涂改了怎么办 c语言挂科了怎么办 吸入腐蚀性气体鼻子流血了怎么办 腰劳损痛的厉害怎么办 两个宝宝斜颈左边力量差怎么办 姿势不正确引起的习惯性斜颈怎么办 一岁宝宝有点斜颈怎么办 六个月宝宝有点斜颈怎么办 5月宝宝有点斜颈怎么办 半岁宝宝头偏怎么办 肌性斜颈成年后怎么办 5个月孩子脖子歪怎么办 宝宝一岁多头歪怎么办 四个月宝宝歪脖子怎么办 1岁宝宝脖子歪怎么办 宝宝脖子是歪的怎么办 小孩脖子睡歪了怎么办 脸部三角区肿了怎么办 面部三角区挤了怎么办 胳膊扭着了肿了怎么办 多囊卵巢综合症治不好怎么办 胳膊受了风发麻怎么办 胳膊抻筋了很疼怎么办 腰抻了怎么办最有效 孩子胳膊抻着了怎么办 胳膊伤筋了疼怎么办 宝宝胳膊抻了疼怎么办 练完普拉提头晕怎么办 生完孩子腰背疼怎么办 宝宝不肯把屎尿怎么办 存的电话删除了怎么办 脚踝的韧带断了怎么办 买了双鞋子想退怎么办 鞋子大了一码怎么办 nba篮球大师身体素质满了怎么办 钉鞋大了一码怎么办 篮球鞋鞋垫会向里面跑怎么办