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核心技术(卷一)》读书笔记——第六章:内部类的更多相关文章

  1. 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)

    <Microsoft Sql server 2008 Internals>索引文件夹: <Microsoft Sql server 2008 Internals>读书笔记--文 ...

  2. C primer plus 读书笔记第六章和第七章

    这两章的标题是C控制语句:循环以及C控制语句:分支和跳转.之所以一起讲,是因为这两章内容都是讲控制语句. 第六章的第一段示例代码 /* summing.c --对用户输入的整数求和 */ #inclu ...

  3. Java核心技术卷一基础知识-第14章-多线程-读书笔记

    第 14 章 多线程 本章内容: * 什么是线程 * 中断线程 * 线程状态 * 线程属性 * 同步 * 阻塞队列 * 线程安全的集合 * Collable与Future * 执行器 * 同步器 * ...

  4. Java核心技术卷一基础技术-第13章-集合-读书笔记

    第13章 集合 本章内容: * 集合接口 * 具体的集合 * 集合框架 * 算法 * 遗留的集合 13.1 集合接口 Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制. 13. ...

  5. Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记

    第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...

  6. Java核心技术卷一基础知识-第11章-异常、断言、日志和调试-读书笔记

    第11章 异常.断言.日志和调试 本章内容: * 处理错误 * 捕获异常 * 使用异常机制的技巧 * 使用断言 * 日志 * 调试技巧 * GUI程序排错技巧 * 使用调试器 11.1 处理错误 如果 ...

  7. Java核心技术卷一基础知识-第9章-Swing用户界面组件-读书笔记

    第9章 Swing用户界面组件 本章内容: * Swing与模型-视图-控制器设计模式 * 布局管理概述 * 文本输入 * 选择组件 * 菜单 * 复杂的布局管理 * 对话框 本章将介绍构造功能更加齐 ...

  8. Java核心技术卷一基础知识-第8章-事件处理-读书笔记

    第8章 事件处理 本章内容: * 事件处理基础 * 动作 * 鼠标事件 * AWT事件继承层次 8.1 事件处理基础 在AWT所知的事件范围内,完全可以控制事件从事件源(event source)例如 ...

  9. Java核心技术卷一基础知识-第7章-图形程序设计-读书笔记

    第7章 图形程序设计 本章内容: * Swing概述 * 创建框架 * 框架定位 * 在组件中显示信息 * 处理2D图形 * 使用颜色 * 文本使用特殊字体 * 显示图像 本章主要讲述如何编写定义屏幕 ...

随机推荐

  1. python enumerate用法总结

    enumerate()说明enumerate()是python的内置函数enumerate在字典上是枚举.列举的意思对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enumera ...

  2. Android : 高通平台Camera调试之SetpropKey/camxoverridesettings.txt

    高通相关网址:Createpoint: https://createpoint.qti.qualcomm.com(可下载文档,Release Note等)Chipcode: https://chipc ...

  3. python学习之闭包

    闭包:是由函数及其相关应用环境组合而成的实体(函数+引用环境) 在嵌套函数中中,如果一个内部函数对外部函数(非全局作用域)中的变量进行引用,内部函数被认为是闭包 闭包中不能修改外部环境的变量中的值 d ...

  4. java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp

    java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp 错误是因为时间类型出现了0 ...

  5. Android软键盘的隐藏显示、事件监听的代码

    把开发过程中重要的一些内容片段做个珍藏,如下资料是关于Android软键盘的隐藏显示.事件监听的内容,应该是对小伙伴们有所用途. public class ResizeLayout extends L ...

  6. python入门之小栗子

    1 点球小游戏: from random import choice score=[0,0]direction=['left','center','right'] def kick(): print ...

  7. hibernate学习以及文件以及注释

    <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hib ...

  8. xss过滤代码

    #!/usr/bin/env python # -*- coding:utf-8 -*- from bs4 import BeautifulSoup class XSSFilter(object): ...

  9. Django中Form验证

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一,Form验证 第一种操作:主要是这三个函数 ...

  10. 芯片烧录器编程AT24C02

    网上买了两款芯片烧录器,因为项目用的到.芯片以后的类型可能是IIC 接口的.就选则了一个IIC接口的AT24C02EEPROM.进行尝试.手头上没有这款芯片. 就想起自己单片机上有这款芯片.然后就开始 ...