java(final和lambda表达式)

final修饰类表示该类不能被继承,final修饰方法表示该方法不能被重写(override),final修饰变量表示该变量一旦被赋值后就不能再被修改。要说的是第三种情况。使用lambda表达式(还有匿名内部类,两者本质相同,注意lambda表达式只能用于函数式接口)要求使用的外层局部变量必须是final修饰的(如果不显式的声明为final,则不允许出现修改该局部变量的操作,即隐式的final),从java内存分配我们知道,final修饰的变量是放在方法区的,这就是关键。

image.png

java8带来很多新的特性,引入lambda表达式是为了加入函数式编程风格,虽然我对函数式,闭包,回调函数这些弄不灵清,但没有关系,我们依然可以分析出为什么引用外层局部变量必须是final修饰的。首先我提出两个概念,我们知道,变量有作用域,但我想分的更细一点,分为空间域和时间域(其实就是生命周期)。空间域由{}决定,变量只在定义它的代码块范围内可见。时间域由方法是否执行完成决定,一个方法内的定义的变量(形参实际上也是方法内部定义的变量,只不过是隐式的,每个方法调用的时候会在方法内定义形参,并把实参的值赋给形参),当方法在执行的时候,它就是存活的,方法结束了,这些变量就被销毁了。但是final修饰的就不一样,final变量存在于方法区,就算定义final变量的那个方法结束了,final变量并不会随着销毁。现在我们讲讲lambda表达式(和匿名内部类),lambda表达式实际上是一个方法,但是这个方法有点特别,它不是传进去就立即执行的,什么时候执行取决于你把方法传给谁,也就是执行时间不确定。我先举一个例子,在方法A内定义Int a = 100,然后方法A内执行给一个定时器(用定时器举例实际代码层面不能实现,因为lambda表达式只能用于函数式接口,而TimerTask不是,我这里用定时器举例只是为了说明问题)对象添加任务,任务的内容是24小时后打印a,然后方法A就结束。我们来分析一下,当我们给定时器传入“打印a”的任务时,我们只是预定了一段代码的执行,预定的代码并不立即执行。24小时后,预定的代码开始执行,来打印a的时候,发现a早就不存在了(A方法结束后a就别销毁了),所以会报错。但是如果使用final修饰a,a就不会随着A的结束而被销毁,而是一直保存在方法区内,就能顺利地执行打印a的代码了。方法区存放的数据为.class文件的内容,静态变量,final变量和即时编译的代码(编译器将一些热点代码直接从源码编译成机器码),可以看到方法区中的数据都是不怎么会变化的数据,所以不是gc重点关注的JVM内存区域,gc重点关注的JVM内存区域是堆

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容