《Java核心技术(卷一)》读书笔记——第六章:内部类
1. 内部类的概念?
类中类
2. 为什么要用内部类?
内部类的方法可以访问外部类的实例域
内部类对外部类的同一个包中的类实现了隐藏
匿名内部类在“想要定义一个回调函数却又不想编写大量代码”时非常便捷
3. 内部类语法详谈(常规)
1. 内部类与外部类是类之间的关系,不是对象之间的关系
虽然TimePrinter类位于TalkingClock类的内部,但这并不意味着,每个TalkingClock对象都有一个TimePrinter实例域。因为,TimePrinter对象是由start方法构造的,亦即,如果TalkingClock对象不调用start方法,便不拥有一个TimePrinter实例域。
2. 内部类既可以访问自己的数据域,又可以访问创建它的外部类对象的实例域
3. 内部类的隐式引用:指向外部类对象(编译器负责)
if ( beep )——》if ( outer.beep) //outer仅用作示意,编译器内部当然不会是outer
指向外部类的隐式引用在构造器中设置。编译器修改了内部类所有的构造器,添加一个引用外部类的参数。即使并没有定义内部类的构造器,编译器也会为内部类生成一个默认的构造器。如:publicTimePrinter(TalkingClock clock) { outer = clock; }
当在start方法中创建了内部类对象后,编译器就会将this引用传递给当前的构造器
ActionListenerlistener = new TimePrinter(this);
4. 将内部类声明为 private,实现对外隐藏,只有外部类可以构造内部类对象
5. 在外部类的作用域之外引用内部类
outerClass.InnerClass
4. 内部类的特殊语法:如何正确使用外部类引用参数
a) 内部类访问外部类实例域
if( beep )——》if( TalkingClock.this.beep );
b) 内部类构造器
ActionListener listener = this.new TimePrinter();
/* 通过这种方法构造的内部类,它的隐式引用与this指向了同一对象 */
c) 通过显示命名,将外部类引用设置为其他对象
下述代码,在TimePrinter公有的情况下,任意外部类都可以构造一个TimePrinter
TalkingClockjabber = new TalkingClock(1000, true);
TalkingClock.TimePrinter listener = jabber.newTimePrinter();
录自http://blog.csdn.net/Reese1995/article/details/77848502?ref=myread
《Java核心技术(卷一)》读书笔记——第六章:内部类的更多相关文章
- 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)
<Microsoft Sql server 2008 Internals>索引文件夹: <Microsoft Sql server 2008 Internals>读书笔记--文 ...
- C primer plus 读书笔记第六章和第七章
这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...
- Java核心技术卷一基础知识-第14章-多线程-读书笔记
第 14 章 多线程 本章内容: * 什么是线程 * 中断线程 * 线程状态 * 线程属性 * 同步 * 阻塞队列 * 线程安全的集合 * Collable与Future * 执行器 * 同步器 * ...
- Java核心技术卷一基础技术-第13章-集合-读书笔记
第13章 集合 本章内容: * 集合接口 * 具体的集合 * 集合框架 * 算法 * 遗留的集合 13.1 集合接口 Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制. 13. ...
- Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记
第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...
- Java核心技术卷一基础知识-第11章-异常、断言、日志和调试-读书笔记
第11章 异常.断言.日志和调试 本章内容: * 处理错误 * 捕获异常 * 使用异常机制的技巧 * 使用断言 * 日志 * 调试技巧 * GUI程序排错技巧 * 使用调试器 11.1 处理错误 如果 ...
- Java核心技术卷一基础知识-第9章-Swing用户界面组件-读书笔记
第9章 Swing用户界面组件 本章内容: * Swing与模型-视图-控制器设计模式 * 布局管理概述 * 文本输入 * 选择组件 * 菜单 * 复杂的布局管理 * 对话框 本章将介绍构造功能更加齐 ...
- Java核心技术卷一基础知识-第8章-事件处理-读书笔记
第8章 事件处理 本章内容: * 事件处理基础 * 动作 * 鼠标事件 * AWT事件继承层次 8.1 事件处理基础 在AWT所知的事件范围内,完全可以控制事件从事件源(event source)例如 ...
- Java核心技术卷一基础知识-第7章-图形程序设计-读书笔记
第7章 图形程序设计 本章内容: * Swing概述 * 创建框架 * 框架定位 * 在组件中显示信息 * 处理2D图形 * 使用颜色 * 文本使用特殊字体 * 显示图像 本章主要讲述如何编写定义屏幕 ...
随机推荐
- fwrite文件写入数据
文件的操作就两种:读和写 读:把文件中的内容读入到程序中,然后根据自己的项目需求把文件的数据进行相关的处理. 写:就是将程序中的数据,写入到文件中,去更新文件. 这么两种操作归到代码中就是这两种函数: ...
- 解决Python图片处理模块pillow使用中出现的问题
最近爬一个电影票房的网站(url:http://58921.com/alltime),上面总票房里面其实是一张图片,那么我需要把图片识别成文字,来获取票房数据. 我头脑里第一想到的解决方案就是要用 ...
- shell脚本中给字符串添加颜色
shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: ec ...
- linux 迁移项目ProtocolException
背景:服务器跟换机房,虚拟机完整迁移项目,只修改ip和主机名 1.检查/etc/hosts 中ip 和主机名映射 2.检查网络端口是否有限制以及端口开放是否全了,检查ip有没有配对.RMI注册不上.
- ansible-play中关于标签tages,handler,notify的使用
--- - hosts: webser remote_user: root tasks: - name: install httpd package yum: name=httpd tages: in ...
- JAVA Number与Math类
Number类: 当要用到数字的时候,我们除了使用内置数据类型byte,int,double等来声明,我们还把它声明为一个对象: 所有的包装类(Integer.Long.Byte.Double.Flo ...
- 基于vue项目的组件中导入mui框架初始化滑动等效果时需移除严格模式的问题
基于vue项目的组件中导入mui框架初始化滑动等效果时,控制台报错:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties ...
- ffmpeg奇数分辨率转码失败
偶然遇到将目的分辨率设置成奇数(例如:854x481)导致ffmpeg转码失败(错误:width not divisible by 2 (854x481)) 于是去查了一下原因:由于转码后的pix_f ...
- Problem A: 重载字符的加减法
Description 定义一个字符类Character,只有一个char类型的数据成员. 重载它的+.-.<<和>>运算符,其中+.-的第二个操作数是int类型的整数n.“+ ...
- QT之两种模态对话框的调用
模态对话框:就是没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互. 1.show调用 LoginDialog *dlg = new LoginDialog(); dlg->setModa ...