位置: 编程技术 - 正文

Java中的匿名内部类:由setOnClickListener说起(java的匿名内部类)

编辑:rootadmin

推荐整理分享Java中的匿名内部类:由setOnClickListener说起(java的匿名内部类),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java匿名类写法,java中的匿名内部类,java的匿名内部类怎么定义,java中匿名内部类详解,java中的匿名内部类,java 匿名,java的匿名内部类,java中的匿名内部类有哪些,内容如对您有帮助,希望把文章链接给更多的朋友!

在初学Android的时候,总是看到这样一段代码:

相信大家对上面这段代码都不陌生,确切的说是再熟悉不过了,咱从学习Android的第一天起就已经开始写这种代码了。没错,确实我们在初学Android的时候就已经开始使用匿名内部类了,但是随着使用的深入,会发现越来越多的问题,例如,为什么这个类里面可以随意使用MainActivity(外部类)里面的所有成员变量,即使是private的变量?为什么当需要一个context的时候却要写MainActivity.this这样的形式?为什么在申明这个内部类的方法里定义的局部变量需要定义为final才能在内部类里面使用?别急,在下为大家逐个解释。 要解释这些问题,首先需要从java的内部类说起(本文不打算详细介绍这个语法,想要详细了解的同学可以求助度娘) java中的内部类一言以蔽之就是,申明在一个类或者方法里面的类(new onClickListener()就是申明在一个类里面的内部类,同时还是匿名的),最典型的内部类申明如下:

Java中的匿名内部类:由setOnClickListener说起(java的匿名内部类)

上述代码中,类Inner申明在类Outer内部,我们称Inner为Outer的内部类,使用内部类好处多多,例如内部类可以直接使用外部类中的所有成员变量和方法,便于代码管理维护,内部类可以用于隐藏实现细节,可以用于实现类的多重继承…(多了就不写了,当时我在学习的时候看到这么多内部类的使用方法感觉云里雾里,直到后来代码见多了才逐渐理解,所以建议大家刚开始不要想着把所有知识点全部搞清楚,先在自己脑中有点印象,以后在编码或读源码的过程中遇到后再逐步去理解,这样跟着实例去理解不仅具体,而且深刻)。 现在大家清楚了吧,为什么onClickListener这个类里面可以使用MainActivity这个类中的所有成员变量和方法,等等,刚刚不是说可以使用所有成员变量么,那为什么会有MainActivity.this这种奇葩的写法。好吧,刚刚没说清楚,大家有没有想过如果内部类中有同名的变量或者方法的时候怎么处理,很简单就是加上外部类的类名+.然后再写上变量名,例如刚刚那个例子,如果内部类中也有一个同名的变量name,则可以这么写:

这也就解释了为什么要写成MainActivity.this这种形式了,因为内部类onClickListener这个类里面已经有一个同名变量this了,如果想要使用外部类MainActivity的this变量,则需要使用MainActivity.this。 好了,内部类的知识先讲到这里(更多详细用法如果大家真的等不及可以自行百度,不过我真的建议大家在使用过程中逐步去发现内部类的使用实例,自己去理解它的用法),下面再说说匿名内部类。 如果一个内部类在并不是显式得使用class关键字来申明,即没有给该内部类一个名字,我们把这种类叫做匿名的内部类,匿名内部类可以用来实例化一个类或者接口,最常见的匿名内部类当属多线程中的Runnable接口:

相信大家对上面这段代码都不会陌生,简直是太熟悉了啊,基本在使用多线程的时候就能见到(当然不排除你是继承Thread类来做的,那我就没办法了)。这里面的Thread以及Runnable其实都是一种匿名内部类。细心的朋友会注意到,这里count被申明为了final,这是怎么回事,我不申明为final难道不行吗,成,行不行咱先试试,把final去掉,我去,编译器怎么报错了!可以看到,编译器不允许在匿名内部类中使用非final类型的变量,这是什么原因呢?大家有没有想过,在申明内部类的时候,例如上述代码,在执行start之后,该局部方法就返回了,那么作为局部变量的count生命周期结束后会被回收,这个时候thread里面的for循环还在执行,此时再引用局部变量count就会变得很奇怪了吧,明明都回收了还怎么使用。好吧,在java中,编译器是这样处理内部类的:如果这个外部局部变量是常量,则在内部类代码中直接用这个常量。如果是类的实例,则编译器将产生一个内部类的构造参数,将这个final变量传到内部类里,这样即使外部局部变量无效了,还可以使用。 好了,那么关于匿名内部类,就先说到这里,我们在编写代码的时候不光要做到知其然,还要做到知其所以然,希望这篇文章能对大家有所帮助。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android性能优化之内存篇 下面是内存篇章的学习笔记,部分内容与前面的性能优化典范有重合,欢迎大家一起学习交流!1)Memory,GC,andPerformance众所周知,与C/C需要通过手动编码来

Android之自定义(上方标题随ViewPager手势慢慢滑动) 最近很蛋疼,项目要模仿网易新闻的样式去做。上次把仿网易新闻客户端的下拉刷新写出来了,这次是ViewPager的滑动,同时ViewPager的上面标题下划线跟

自定义之仪表盘 自定义的View,实现了转盘的动画旋转,通过结合Animator实现的动画。效果图:源码下载地址:

标签: java的匿名内部类

本文链接地址:https://www.jiuchutong.com/biancheng/374353.html 转载请保留说明!

上一篇:Zxing在CameraManager.get().closeDriver()报错

下一篇:Android性能优化之内存篇(Android性能优化工具)

  • 石油税费是多少
  • 生产税净额计算实例
  • 汇算清缴的费用会计怎么做账
  • 速达3000货品怎么入库
  • 增值税普通发票和普通发票的区别怎么交税
  • 本期实际抵减税额合计
  • 建设用地规划许可证和建设工程规划许可证的区别
  • 职工食堂支出明细表
  • 劳动保护费通过什么确认
  • 公司代扣社保为什么是400多余的钱
  • 职工在病假领取失业金
  • 企业成立股东没有实际出资分录怎么写?
  • 房地产企业预缴税费
  • 开错的红字发票申请单上传了怎么撤销?
  • 商贸公司账务复杂吗
  • 咨询服务企业发展瓶颈期
  • 税务系统勾了为什么还能认证?
  • 固定资产直接进费用违背什么
  • 托收承付结算方式
  • 出租设备的折旧计入哪个科目
  • 企业短期投资交增值税吗
  • 收到捐赠的固定资产需要折旧吗
  • 土地城镇化怎么计算
  • 托收承付结算的付款期均为三天
  • 去银行补充企业信息流程
  • 文件夹如何更改图标
  • 腾讯手游助手使命召唤怎么滑铲
  • 更改文件后缀算转换格式吗
  • 结转材料采购成本的会计分录是什么
  • macos10.15.7
  • php单双引号的区别
  • 企业存货成本包括利润吗
  • 以公允价值计量是什么意思
  • 预测编码方式
  • php实现5分钟倒计时
  • 简述php的概念和特点
  • 销售退换货的账务处理
  • php有哪些
  • php用echo输出图片
  • python的series
  • python每行输出五个且对齐
  • 年报企业所得税的分录怎么做
  • 垃圾处置费的收费标准
  • 车辆上牌费用会涨吗
  • sql注入漏洞不会出现在哪个位置
  • python动态数据类型
  • 所有者权益的确认依附于什么的确认
  • 小规模纳税人是什么意思
  • 银行汇票的特点和用途
  • 资产减值准备如何影响利润
  • 特殊收入如何计税
  • 支付给法律顾问怎么做账
  • 补交以前年度企业所得税怎么入账
  • 运输费用增值税税率9%
  • 高新技术企业认定条件
  • 无票收入如何做凭证
  • 固定资产的资本化和费用化
  • 电商支付的刷单费怎样做记账凭证?
  • 企业购买国债逆回购怎么操作
  • 合伙企业与公司相比,有什么优势呢?
  • 如何在境外银行开户
  • linux下mysql5.7.17最新稳定版本安装教程
  • 如何解决win10系统用户名有中文
  • win10系统小娜不见了
  • macbook怎么玩ios游戏
  • win8系统怎么更改系统语言
  • xp开始菜单栏怎么还原
  • win8关机一直转圈
  • windows8任务栏在下面怎么不显示
  • win7系统文件夹怎么加密
  • win7开机无信号之后黑屏
  • javascript概述及作用
  • npm安装插件失败
  • jquery点击事件写法
  • gimp批处理
  • javascript delete 使用示例代码
  • js实现超精简的快捷键
  • python魔法方法详解
  • 湖南电子税务局app
  • 减免所得税额怎样计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设