草庐IT

On Java 8读书笔记

z轩 2023-03-28 原文

第一章 什么是对象

1.1 抽象的历程

”对象“:问题空间中的元素及其解决方案空间中的具体呈现。

理念即是通过添加各种新的对象,可以将程序改编为一种描述问题的语言。

对象是具有状态、行为及标识的。

对象可以拥有自己的内部数据(用以赋予状态),方法(用以产生行为),对象在内存中都有唯一的地址。

1.2 对象具有接口

关键字class的由来:状态不同但结构相同的对象汇聚在一起而组成的同一类对象。

类是描述了一系列具有相同特征(即数据元素)和行为(即功能方法)的对象,也就是说类其实是数据类型。

在面向对象领域中,我们将创建的变量称为”对象“或者”实例“,将操作变量称为”发送消息“或者”发送请求“。

让一个对象真正的发挥其作用就是向对象发送请求。而对象能够接收什么请求,是由其接口决定,对象所归属的类则定义了这些接口。

eg:

类型名 Light
接口 on()
off()
brighten()
dim()
Light lt=new Light();
lt.on();

接口定义了能向这个对象发送的请求。

代码+隐藏的数据=”实现“

1.3 对象可以提供服务

在开发一个面向对象程序或者理解其设计时,可以将对象想象成”服务提供者“。程序是为用户提供服务的。

高内聚性:设计的组件(比如对象、方法、对象库等)无论从哪个方面都整合的很好。

1.4 隐藏的实现

程序员的两大阵营:”类的创建者“(负责创建新数据类型的人),”客户程序员“(在自己的应用程序里使用现有数据类型的人)。

”类的创建者“:只暴露必要的接口给客户程序员,同时隐藏其他所有不必要的信息。这样可以避免修改隐藏信息时对其他人造成的影响,即是隐藏代码的具体实现可以有效的减少程序的bug。

设置访问控制

首要原因:防止客户程序员接触本不应该接触的数据类型内部运转的代码(即非那些用于解决特定问题的接口部分)。

第二个原因:让接口部分和实现部分分离,便于库的设计者在改变类的内部工作机制时,不用担心影响到使用该类的客户程序员。

Java提供了三个显示的关键字(访问修饰符)来设置访问控制:

  1. public:可被所有人访问
  2. private:只能被类的创建者通过该类自身的方法访问
  3. protected:与private相似,但继承的子类可以访问protected成员

还有一种默认的访问权限,即是包访问(package access)

1.5 复用实现

复用一个类的最简单方法就是直接使用该类所生成的对象。

组合:新创建的类可以由任意数量和类型的对象组成,也可以任意组合这些对象以满足想要的功能,即是利用已有的类组合成一个新的类。(如果组合是动态的,通常称为聚合

1.6 继承

为了避免重复性代码的书写(即创建功能相近的类),我们复制了现有的类并且能够在此基础上再做一些增补,这就是继承的好处。

子类可继承父类的所有成员变量和方法及接口,同时子类可以增加或者复写父类没有或者已有的成员变量和方法及接口。

区分子类和父类很简单,第一种直接为子类添加新的方法,那么执行时,父类的行为讲会和你的预期不符。第二种就是重写方法,可以让子类与父类增加差异化。

is-a关系与is-like-a关系

替换原则(里氏替换原则):即当只重写父类中定义的方法时,子类和父类的类型将会是完全相同的(接口一模一样),这样我们就能够用子类的对象代替父类的对象。这是一种理想的继承方式,即是is-a关系

当我们为子类的接口添加新的内容时,子类依然能够代替父类的对象,但不饿能通过父类的接口获取子类的新方法,这种关系即是is-like-a关系

1.7 多态

当涉及类型层次的时候,将一个对象视为父类的一个实例,而不是对象实际的类。

不同子类执行父类的同一方法时的结果应该是不同的,那么我们可能需要的是派生子类,这样可以扩展程序设计的能力。

eg:

当Bird对象的move()方法被调用时,(Goose对象执行的是行走、飞翔或者游泳,Penguin对象执行的则是移动或者游泳)。

我们将子类视为父类从而能够区别不同对象的不同方法,这也是向上转型

前期绑定是非面向对象编译器的调用函数时所触发的,这样意味着当调用具体方法时,该方法名就决定了被执行代码的绝对地址。

但对于继承,程序需要运行时才能明确代码的地址,所以就有了面向对象使用的机制:后期绑定。(Java里会默认具备动态绑定特性,所以不用借助其他的关键字或者代码来实现多态,但c++会使用virtual关键字)

1.8 单根层次结构

单根层次结构有利于实现垃圾收集器,这也是Java相对于c++的一个重要改进。既然所有的对象都拥有类型信息,那么就不用再去了解某个对象具体是什么类型了,这个特性对于系统级别的操作尤其重要,比如异常处理。

1.9 集合

在大多数语言中,用数组就可以保存许多的内容。而Java中通常是创建一种新类型的对象,然后利用这个新对象来保存其他对象的引用,这个对象通常被叫做集合,并且会根据放入其中的内容而自行调整空间。

当然不同的集合也有着不同的用途:

几个不同的List类(用于保存序列),几个Map类(也叫做关联数组,用于关联对象),几个Set类(用于保存不同类型的对象),以及一些队列(queue)、树(tree)、栈(stack)等。

不同的集合在特定操作的执行效率上也有差异,比如:ArraytList和LinkedList,ArraytList随机获取元素是一种耗费固定时间的操作,意思就是不管你选择获取哪个元素,耗费的时间都是相同的,而LinkedList在列表中随机选择元素是一种代价很大的操作,查找列表更深处的元素也会耗费更多的时间。如果要在列表中插入元素,LinkedList耗费的时间会比ArrayList更少。

参数化类型(泛型)

当我们知道向上转型是安全的时,反过来我们不知道Object对象实际上是什么类型,那么这种向下转型就是不安全的,当然如果向下转型失败,会得到异常。

为了节省向下转型与其关联的运行检查所需要的时间,我们通常关注创建的集合能不能明确所包含的对象类型。

1.10 对象的创建和生命周期

C++需要显式删除对象,因为C++的宗旨是效率优先。

Java只允许动态分配内存。当创建一个对象时,需要new操作符来创建一个对象的动态实例。

Java语言的底层支持垃圾收集器机制,所以它会自动找到无用的对象并将其销毁。

1.11 异常处理

异常是从错误发生之处“抛出”的对象,而根据错误类型,它可以被对于的异常处理程序所“捕获”,当然异常不允许被忽略。

有关On Java 8读书笔记的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  3. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  4. 计算机网络笔记:TCP三次握手和四次挥手过程 - 2

    TCP是面向连接的协议,连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP连接的管理就是使连接的建立和释放都能正常地进行。三次握手TCP连接的建立—三次握手建立TCP连接①若主机A中运行了一个客户进程,当它需要主机B的服务时,就发起TCP连接请求,并在所发送的分段中用SYN=1表示连接请求,并产生一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x。主机B收到A的连接请求报文,就完成了第一次握手。客户端发送SYN=1表示连接请求客户端发送一个随机发送序号x,如果连接成功,A将以x作为其发送序号的初始值:seq=x②主机B如果同意建立连接,则向主机A发送确认报

  5. 华为数通笔记VXLAN&BGP EVPN - 2

    VXLAN简介定义RFC定义了VLAN扩展方案VXLAN(VirtualeXtensibleLocalAreaNetwork,虚拟扩展局域网)。VXLAN采用MACinUDP(UserDatagramProtocol)封装方式,是NVO3(NetworkVirtualizationoverLayer3)中的一种网络虚拟化技术。目的随着网络技术的发展,云计算凭借其在系统利用率高、人力/管理成本低、灵活性/可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新趋势。而服务器虚拟化作为云计算的核心技术之一,得到了越来越多的应用。服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时,为

  6. [蓝桥杯单片机]学习笔记——串口通信的基本原理与应用 - 2

    目录一、原理部分1、什么是串行通信(1)并行通信与串行通信(2)串行通信的制式(3)串行通信的主要方式  2、配置串口(1)SCON和PCON:串行口1的控制寄存器(2)SBUF:串行口数据缓冲寄存器 (3)AUXR:辅助寄存器​编辑(4)ES、PS:与串行口1中断相关的寄存器(5)波特率设置  3、串口框架编写二、程序案例一、原理部分1、什么是串行通信(1)并行通信与串行通信微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信:数据的各位同时发送与接收,每个数据位使用一条导线,这种方式传输快,但是需要多条导线进行信号传输。串行通信:数据一位一

  7. 【微服务笔记23】使用Spring Cloud微服务组件从0到1搭建一个微服务工程 - 2

    这篇文章,主要介绍如何使用SpringCloud微服务组件从0到1搭建一个微服务工程。目录一、从0到1搭建微服务工程1.1、基础环境说明(1)使用组件(2)微服务依赖1.2、搭建注册中心(1)引入依赖(2)配置文件(3)启动类1.3、搭建配置中心(1)引入依赖(2)配置文件(3)启动类1.4、搭建API网关(1)引入依赖(2)配置文件(3)启动类1.5、搭建服务提供者(1)引入依赖(2)配置文件(3)启动类1.6、搭建服务消费者(1)引入依赖(2)配置文件(3)启动类1.7、运行测试一、从0到1搭建微服务工程1.1、基础环境说明(1)使用组件这里主要是使用的SpringCloudNetflix

  8. 论文笔记:InternImage—基于可变形卷积的视觉大模型,超越ViT视觉大模型,COCO 新纪录 64.5 mAP! - 2

    目录文章信息写在前面Background&MotivationMethodDCNV2DCNV3模型架构Experiment分类检测文章信息Title:InternImage:ExploringLarge-ScaleVisionFoundationModelswithDeformableConvolutionsPaperLink:https://arxiv.org/abs/2211.05778CodeLink:https://github.com/OpenGVLab/InternImage写在前面拿到文章之后先看了一眼在ImageNet1k上的结果,确实很高,超越了同等大小下的VAN、RepLK

  9. uniapp+uview开发微信小程序学习笔记(一) - 2

    文章目录前言一、注册小程序二、项目创建三、运行项目四、其他配置最后前言此次项目开发使用uniapp和uview进行开发,需要用到的开发工具为HBuilderX和微信开发者工具,具体的安装方式见官网,小程序注册见微信公众平台。一、注册小程序注册在微信公众平台注册小程序,按照提示注册完后会发配一个appid和密钥,需要复制保存好。完善信息设置=>基本设置,填写小程序基本信息,包括名称、头像、介绍及服务范围等。第三方设置根据开发需求添加插件授权。成员管理管理=>成员管理,点击编辑或下拉选择添加成员,输入微信号添加新的项目成员,只有成员可以进行真机测试。体验成员可以使用发布的体验版。开发设置开发=>开

  10. ESP32学习笔记(七) 复位和时钟 - 2

    ESP32学习笔记(七)复位和时钟目录:ESP32学习笔记(一)芯片型号介绍ESP32学习笔记(二)开发环境搭建VSCode+platformioESP32学习笔记(三)硬件资源介绍ESP32学习笔记(四)串口通信ESP32学习笔记(五)外部中断ESP32学习笔记(六)定时器ESP32学习笔记(七)复位和时钟1.复位2.系统时钟2.1时钟树2.2时钟源从时钟树可以看出时钟源共七种ESP32的时钟源分别来自外部晶振、内部PLL或振荡电路具体地说,这些时钟源为:2.2.1快速时钟PLL_CLK320MHz或480MHz内部PLL时钟XTL_CLK2~40MHz外部晶振时钟,模组板载的是40MHz晶

随机推荐