《java核心技术(卷一)》读书笔记——第六章:内部类

     2022-03-24     763

关键词:

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

 

《构建之法》第六章读书笔记

...开发过程中应该每天共同工作5、以有进取心的人为项目核心,充分支持信任他们6、无论团队内外,面对面的交流始终是最有效的沟通方式7、可用的软件是衡量项目进展的主要指标8、敏 查看详情

《java并发编程实战》第六章任务运行读书笔记

一、在线程中运行任务无限制创建线程的不足.线程生命周期的开销很高.资源消耗.稳定性二、Executor框架Executor基于生产者-消费者模式,提交任务的操作相当于生产者。运行任务的线程则相当于消费者。1.Executors返回ExecutorService2.... 查看详情

java并发编程的艺术,读书笔记第六章concurrenthashmap以及并发容器的介绍

ConcurrentHashMap的原理将数据一段一段的存储然后给每一段数据分配一把锁,当线程访问数据的一段时,为每段分配一把锁,同时其他段的数据可以被其他线程数据访问2)concurrentHashMap的结构concurrentHashMap由segament数组和hashentry数组... 查看详情

javascript高级程序设计(第3版)第六章读书笔记

第六章面向对象的程序设计1.数据属性[[Configurable]]:表示能否通过delete删除属性从而重新定义属性。默认值为true。[[Enumerable]]:表示能否通过for-in循环返回属性。默认值为true。[[Writable]]:表示能否修改属性的值,默认为true。[[Va... 查看详情

存储器层次结构--《深入理解计算机系统》第六章读书笔记

1.几种存储技术随机访问存储器RAM,RAM又分为两类:静态的SRAM和动态的DRAM。静态SRAM特点:容量较小,速度较之动态DRAM要快很多,故而价格也较高。一般用作CPU与内存的缓存。动态DRAM特点:容量较大,速度比SRAM慢,价格相对较... 查看详情

读书笔记-js高级程序设计-第六章面向对象的程序设计

 EcmaScript有两种属性数据属性和访问器属性数据属性有4个特性ConfigurableEnumerableWritableValue 前三个值的默认值都为false 举例Object.defineProperty(person,"name",{writable:false,value:"niko"}); 一旦属性定义为不可配置的,就不能再... 查看详情

读书列表

 记录读书列表,促进阅读~蓝血十杰2017-04-20百年孤独(英文版)ThinkinginC++(英文版)卷一2017-04-26ThinkinginC++(英文版)卷二ReadingCodeJava核心技术卷一Java核心技术卷二重构    查看详情

java核心技术卷一笔记7

第九章集合9.1Java集合框架在Java类库中,集合类的基本接口是Collection接口。访问集合元素时,使用“foreach”循环编译器会将其翻译成带有迭代器的循环。元素被访问的数据取决于集合类型,对于ArrayList进行迭代就会按顺序得到... 查看详情

java核心技术卷一笔记8

第十四章并发多进程和多线程的区别:每个进程拥有自己的一套变量,而线程共享数据。14.1什么是线程不要调用Thread类或Runnable对象的run方法。直接调用run方法只会执行同一个线程中的任务,而不会启动新线程。应该调用start方... 查看详情

java核心技术卷一笔记六date类

在Java核心技术卷就行了一前期 date类出现的频率很高 所以就对date类进行了小小的整合Date类有两个date类表示特定时间的类 这个构造函数分配一个Date对象并初始化它代表指定的毫秒数,因为被称为“纪元”,即1970年1... 查看详情

android深度探索(卷1)hal与驱动开发第六章 第一个linux驱动程序:统计单词个数读书笔记

...动。在这个统计单词个数的实例中,重点是该算法的实现技术:即Linux驱动,而不是如何统计的。6.1Linux驱到底是什么Linux驱动的工作方式和访问方式是Linux的特点之一。Linux系统将每一个驱动都映射成一个文件,这些文件被称为... 查看详情

第六章预习笔记

1:盒子模型由content(网页内容)border(边框)padding(内边框)margin(外边框)2:外边框属性上(top)下(bottom)左left)右(right)3:边框的属性:color,width,style4:border-top-coior.,border-tbottom-coior.,border-left-coior.,border-right-coior.5::b... 查看详情

java笔记第六章

循环结构(二)1for循环  for(初始值;条件;改变循环天条件){      //主体语句1    }   初始值:控制循环变量的值。(可以是多的变量逗号隔开)   条件:必须是布尔表达式。   迭代运算:一个算... 查看详情

读书笔记--java核心技术--基础篇

第三章 Java基本程序设计-----------------------------------------------------------------在JAVA中,/**/注释不能嵌套Java有8种基本类型4种整型:int,long,short,byte;长整型后缀加L,0x前缀表示十六进制,0前缀表示八进制,0b前缀表示二进制2种... 查看详情

读书笔记--java核心技术--高级特征

第一章--流与文件----------------------------------------------流读写字节java.io.InputStream1.0abstractintread()//从数据中读入一个字节,并返回该字节,在碰到流的结尾时返回-1intread(byte[]b)//读入一个字节数组,并返回实际读入的字节数,或者... 查看详情

《csapp》读书笔记

第一章第二章第三章第四章第五章第六章第七章链接可重定位目标文件符号和符号表符号解析第八章第九章第十章第十一章第十二章逐步添加。。 查看详情

核心技术读书笔记

Java核心技术l 字符串是用标准的Unicode格式存储的l main方法必须声明为public,且必须是静态的l 用花括号划分程序的各个部分称为块l Byte 范围是-128到127(包括0一共256)l 0x16进制的前缀;0是8进制的前缀;0b... 查看详情

java核心技术卷i读书笔记(代码片段)

文章目录2021/8/33.5运算符3.6字符串3.7输入输出2021/8/33.5运算符关键字strictfp对于使用strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果,如可以把main函数标记为publicstaticstrictfpvoidmain(String[]args)于是main函数中... 查看详情