为什么android的成员变量要定义final才能在方法里面用?

 我来答
beiyus
推荐于2018-03-12 · TA获得超过329个赞
知道答主
回答量:140
采纳率:100%
帮助的人:98万
展开全部
因为你这个变量ll是onCreate()方法的一个局部变量,而在onClick()方法里面的new onClickListener(){}其实是以onClickListener接口为基础隐式创建了一个主类的内部类,也就是说new onClickListener(){}中括号内的东西,和oncreate()方法的作用域不同。所以如果你要跨作用域使用的话,方法有两种:一种就是你看到的在局部作用域内将属性声明为final的,第二种就是把你的方法属性的声明放到方法外作为一个类属性,这个时候由于内部类是在主类里边的,所以它可以访问主类的全部属性。
修正一下:两种方法都不是跨作用域使用,而是用不同的方法将ll变量的作用域扩大。
槽泥煤啊
2013-12-06
知道答主
回答量:28
采纳率:0%
帮助的人:17.4万
展开全部
局部内部类,要引用外部方法的局部变量的话就要加final,第二张图中LinearLayout ll是类的属性,作用域是整个类,类中的方法都可以引用(静态方法除外)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
涉欲P
推荐于2016-12-04
知道答主
回答量:5
采纳率:0%
帮助的人:8万
展开全部
这是因为你的listener实际上是使用了内部类,内部类当然不知道外部方法的变量了。但是外部类的变量是可以看到的,如果要在方法内让其内部类看见该方法的变量就要加上final来保证在改方法中只有一个ll,包括它的内部类。不知道你明白没有~~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式