A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 精灵来了 中级黑马   /  2015-5-22 00:33  /  439 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量是什么意思?

6 个回复

倒序浏览
就是说你在局部上定义了一个变量,在这个局部的括号结束的时候,这个变量就会被垃圾回收器回收了,但是你却想在类中访问它,所以肯定是不行的,所以要用final修饰,让这个变量成为常量
回复 使用道具 举报
因为局部内部类 是存在堆内存上的 如果他里面还有使用着局部变量的东西  那么 这个局部变量不能随着调用结束而消失 所以 为了延长这个局部变量的生命期 就需要加final修饰 了。
回复 使用道具 举报 2 0
为了延长内部类的生命周期,加final修饰的局部变量相当于是常量了
回复 使用道具 举报
接口中不允许方法的实现,而抽象类是允许方法实现的及定义变量的,因此我们可以看出接口是比抽象类更高层次的抽象。如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为(例如set()方法)来修改属性。那么有些人就会提出可以通过实现接口的类的实例来修改接口的属性。那好,如果接口中有一变量c,我们通过实现它的A类对象改变了c的值,那么实现接口的B类,C类中的c变量都要跟着改变,可想而知这样就会造成混乱,很多想要实现接口的类就不知道接口里现在c变量到底是什么值,因为接口是在变的,它不再是那种高层的抽象,而是带了可变的成分。所谓的抽象就是把一些不可变的东西放在一起,而可变的东西往往放在实现里面。
    所以我们深思接口的本意所在,实际上它是对一类事物属性和行为的高层次抽象,它体现的是OCP(对修改关闭,对扩展开放)原则,这也是我们软件开发中一直所追求。
回复 使用道具 举报
顶顶顶:victory:
回复 使用道具 举报
青春印记深圳 来自手机 中级黑马 2015-5-23 00:47:23
7#
意思是说加了final后的局部变量在常量池中会有足够的时间给局部内部类调用。不会因为没加时消失了局部内部类调用不到而报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马