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

如题所述

因为你这个变量ll是onCreate()方法的一个局部变量,而在onClick()方法里面的new onClickListener(){}其实是以onClickListener接口为基础隐式创建了一个主类的内部类,也就是说new onClickListener(){}中括号内的东西,和oncreate()方法的作用域不同。所以如果你要跨作用域使用的话,方法有两种:一种就是你看到的在局部作用域内将属性声明为final的,第二种就是把你的方法属性的声明放到方法外作为一个类属性,这个时候由于内部类是在主类里边的,所以它可以访问主类的全部属性。
修正一下:两种方法都不是跨作用域使用,而是用不同的方法将ll变量的作用域扩大。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-06
局部内部类,要引用外部方法的局部变量的话就要加final,第二张图中LinearLayout ll是类的属性,作用域是整个类,类中的方法都可以引用(静态方法除外)。
第2个回答  推荐于2016-12-04
这是因为你的listener实际上是使用了内部类,内部类当然不知道外部方法的变量了。但是外部类的变量是可以看到的,如果要在方法内让其内部类看见该方法的变量就要加上final来保证在改方法中只有一个ll,包括它的内部类。不知道你明白没有~~本回答被提问者采纳
相似回答