Android开发基础教程.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
匿名内部类只能使用外部方法的局部常量 原因如下: 对象的生命周期与局部变量不同,局部变量的生命周期不超过方法的作用域,即方法执 行完毕后,方法栈中的所有局部变量都将被JVM 回收。而对象是在没有引用变量指向时,才 会由JVM 回收。若方法执行完毕后,匿名内部类仍由方法之外的引用变量指向,则该对象仍 会存在,但该对象又使用了方法中的某个局部变量,该局部变量是应该回收?还是不回收? 为解决这个矛盾。Java 会在匿名内部类中隐含地创建一个同类型的变量,将局部变量的值 赋值给该变量,则匿名内部类使用的变量是这个隐含的变量,该变量与匿名内部类的生命周 期相同。这就解决了以上的矛盾。即匿名内部类之外的方法执行完毕后,JVM 会正常的将方 法中的所有变量回收。而不影响匿名内部类。 因此,代码上我们看到的匿名内部类使用的是外部方法的局部变量,实际上使用的是那 个隐含的变量。 但这又会出现一个新的问题,若我们在匿名内部类中修改该变量的值,实际上是不会影 响外部方法中的局部变量,但代码上看上去,就会出现一个“变量”有两个值的情况。为此, Java 硬性规定:这种变量的值不允许修改,所以就必须声明为常量。 【示例-6】 匿名内部类中若使用外部方法的局部变量,则该局部变量必须改为常量类型 package com.ityw.se1.day01; import com.ityw.oop.day03.usb.USB; import com.ityw.se1.day01.entity.Computer; public class Test06 { /** * 匿名内部类中若使用外部方法的局部变量,则 * 该局部变量必须改为常量类型。 */ //创建静态成员变量computer static Computer computer=new Computer(); public static void main(String[] args) { //创建外部类的实例 Test06 test06=new Test06 (); //调用createScanner()向集合computer.usbs添加一个扫描仪对象 test06.createScanner(); //调用扫描仪的读写方法 computer.usbs [0].read(); computer.usbs [0].write(); } //createScanner创建一个扫描仪对象,该对象实现了USB接口 void createScanner(){ //设置为常量类型 final StringBuilder scannerName=new StringBuilder(扫描仪); //创建匿名内部类,并将地址保存在接口变量scanner中 USB scanner=new USB() { @Override public void write() { System.out.println(scannerName+将扫描的数据发送至主机); } @Override public void read() { System.out.println(scannerName+在扫描纸质文件); } }; //将匿名内部类的地址添加至数组中 computer.usbs [0]=scanner); } //createScanner()结束处 } 说明: 1、在Test06 类中声明了一个Computer 类型的静态对象computer。 2、在Test06 类中声明了一个方法createScanner,该方法负责创建一个实现了USB 接 口的扫描仪对象,该对象以匿名内部类的方式创建,并将对象地址赋值给方法中的局部变量 scanner。 createScanner 将创建的匿名内部类的地址存放在了computer.usbs[0]中。 3、该匿名内部类使用了外部方法createScanner 中的一个局部变量sca

文档评论(0)

shaoyifen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档