OOP丨《Java编程思想》阅读笔记Chapter 1对象导论

Java-Study 基础环境搭建。 阅读详情

《Java编程思想》Reading Note Chapter 1

读《Java编程思想》
定一下阅读的核心思想:

  1. 了解为主,记录重点
  2. 跟上实践,实践中认识

目录:


1. 第1章 对象导论

1.1 抽象过程

对于 “对象” 的理解
抽象的重要意义

简单来说:对象具有状态、行为和标识
分别意味着:

  1. 状态:内部数据
  2. 行为:可以产生行为(表现为函数等)
  3. 标识:每个对象可以唯一与其他对象区分(具体来说,可以说表现为在内存中的地址不同)

1.2 对象的接口

可以用类型来理解类:
类(class)的本质就是一个数据类型,描述了有相同特性(数据元素)与行为(功能)的对象集合

1.3 对象提供服务

对象的另一理解方式:“服务提供者”
程序设计就是创建提供需要的服务的对象的过程

好处:
将问题和解决方案进行抽象
提高内聚性
提高程序可读性

1.4 被隐藏的具体实现

即面向对象编程的重要内核之一:封装
重点就在于,接口和实现的分离

Java类内部边界设定关键字:

  1. public
  2. private
  3. protected

1.5 复用具体实现

面向对象编程的另一重要内核与追求:复用
复用方式:

  1. 直接创建类对象并使用
  2. 将类的一个对象置于新的类中(创建一个成员对象)
    类由其他类组成,通常称组合(composition)
    若为动态发生,责成聚合(aggregation)
    视为“has-a(拥有)”关系

注意与下面的继承概念区分
建立新类时首先考虑能否使用组合,可以更加简单灵活

1.6 继承

依然是面向对象编程中的重要内核:继承

1.6.1 内涵

以现有类为基础,复制它,通过添加和修改此副本来创建新类
描述为:父类到子类的过程
注意这种方式,父类的修改也会体现在子类当中

1.6.2 理解
  1. 基类型(父类)&导出类型(子类)
    基类型描述了其导出类型所共享的特性和行为
    (后面有实现差异方式的具体体现)
  2. 继承现有类型,也就创造了新的类型
  3. 基类和导出类具有相同的基础接口,其必定伴随相应的具体实现
  4. 基类与导出类产生差异的两种方式:
    1. 在导出类中新添方法(此时其接口不属于基础接口)
    2. 改变现有基类的方法的行为,即覆盖(overriding)
      具体表现为直接在导出类中创建该方法的新定义
1.6.3 “是一个(is-a)”与“像是一个(is-like-a)“

本质上区别在于继承方式(即理解中所述的父类与子类的差异方式)

若导出类仅通过覆写基类继承,则称为纯粹替代,可以导出类与基类为“is-a”关系
如果还有添加新的方法,则是”is-like-a“关系

其中体现的思想很丰富,显然我们认为前者是最佳和最简单的,但是显然我们很多时候不得不使用后者,但是这个过程中我们或许也可以思考,基类是否还足以描述我们所需要的导出类呢?

1.7 伴随多态的可互换对象

本节讲述的是面向对象编程的另外一个重要内核:多态

源自于我们非常常用的思维方式:泛化(generic)
即我们处理一个对象,常常只是将其作为其基类的对象来对待,而并不想在意其继承后成为导出类型的具体类型

1.7.1 优点

泛化的好处是显然的:让我们可以写出不依赖于特定类型的的代码,因而在添加新的子类型时可以十分容易
这对于我们的设计的优化和维护成本的降低意义极大!

1.7.2 多态的实现
  1. 但这样显然也带来一个问题:应该如何将导出类型泛化为基类型?具体表现为程序因该如何知道在基类某一方法在子类表现不同时,到底应该执行哪段代码?
    此答案也是面向对象程序设计的重要妙诀:编译器不采用传统意义上的函数调用
  2. 相关概念:
    非面向对象编程编译器函数调用会引起前期绑定
    而面向对象程序设计语言采用后期绑定的概念
    解释:
    1. 前期绑定意味着编译器产生一个对于具体函数标识名的调用,然后运行时将其解析到将要被执行的代码的绝对地址
    2. 后期绑定则是OOP语言编译器先保证被调用方法的存在,并对调用参数和返回值执行类型检查(强类型的语言特征之一),Java再采用一小段特殊代码代替绝对地址调用,使用了在对象中存储的信息来计算方法体的地址,因而每一个对象都可以具有不同的行为表现
    3. 注意,C++需要明确声明(通过virtual)才会次啊用后期绑定属性,但是Java动态绑定是默认行为
  3. 对于将导出类看作是它的基类的过程,我们则有专门的名称:向上转型(upcasting)
    名源于继承图常用的基类在上、导出类向下散开的经典布局方式
1.7.3 多态的应用方式

我们如果编写一段代码,其忽略类型的具体细节,而仅与基类进行交互。那么代码和具体类型信息是分离的(decoupled)

优点:

  1. 使代码编写更为简单且易于理解
  2. 可以通过继承机制为基类添加新导出类型,那么已有的代码将会同样可以作用于新的类型,使得程序具有可扩展性

1.8 单根继承结构

  • TODO:(暂时还没能完全理解) #3

java采用单根继承结构
即:所有的类都继承自单一的基类
这个终极基类的名字为Object

单根继承结构中,所有的对象均具有一个共用的接口,因此它们归根到底都是相同的基本类型

单根继承结构保证所有的对象都具有某些功能
这有几点好处

  1. 在系统中可以在每个对象上执行某些基本操作
  2. 对象都可以容易地在堆上创建
  3. 参数传递得到了极大的简化
  4. 使得垃圾回收器的实现变得容易得多
    垃圾回收器是java相对C++的重要改进之一

1.9 容器

1.9.1 起源

在实际情况中,我们往往不知道在解决某问题时需要多少个对象,这些信息通常只有运行时才能获得

因此面向对象语言中选择创建另一种新对象进行解决,这种对象通常被称为容器
这种对象类型持有其他对象的引用
它们可以在任何时候根据需要扩容

设计思想:
需要的是可以被操作,从而解决问题的序列
因而需要的是尽量简单化和统一化
但是由于以下两种原因

  1. 不同容器提供不同类型的接口和外部行为
  2. 不同容器对于某些操作具有不同的效率
1.9.2 参数化类型

Java中,早期版本容器存储对象仅有通用类型Object
因此Java中所有对象都可以通过向上转型为Object而置入容器
但这样就会有一个问题:存入时丢失了具体身份的对象,取出时应该如何变回存入前的对象?

此处则使用了另一个方法:向下转型
与向上转型相反,不是泛化,而是转为更具体化的类型

但是向下转型我们仍然需要以某种方式记住对象的具体类型,才可以正确执行向下转型
因而参数化类型机制的解决方案被提出
参数化类型(也称泛型):一个编译器可以自动定制作用于特定类型上的类

示例:创建一个存储Shape的ArrayList

ArrayList<Shape> shapes = new ArrayList<Shape>()

1.10 对象的创建与生命期

正如C中变量有全局、局部、静态之分
他们有着不同的作用域与声明周期
这在面向对象编程中,也是我们使用对象时最关键的问题之一:
对象的生成方式与销毁方式

1.10.1 C++的参考

作为参考,C++中由两种方式创建对象:

  1. 将对象置于堆栈(它们有时被称为自动变量或限域变量)或静态存储区域内
    对象地存储空间和声明周期在编写程序时确定,对于提高执行速度有作用
    但是牺牲了灵活性,需要在编写时确定对象数量、声明周期、类型
  2. 在被称为堆(heap)的内存池中动态地创建对象
    对象的数量、生命周期、类型在运行时才能确定,具有较高地灵活性
    但是创建对象时在堆中分配存储空间的时间可能远远大于在堆栈中所需时间,具体来说依赖于存储机制地设计(数据结构)
1.10.2 Java的方案

Java完全采用动态内存分配方式 (即上述第二种方式)
具体来说,每当要创建新对象时,就要使用new关键字来构建此对象的动态实例

动态方式采用一个一般性的逻辑假设:
对象趋于变得复杂,查找和释放存储空间的开销不会对对象的创建造成重大冲击
因此动态方式的选择是对于解决一般化编程问题的更大灵活性的选择

另外Java提供了 “垃圾回收器” 的机制用于处理内存释放问题
其可以自动地发现对象何时不再被使用,并继而进行销毁(C++中则必须通过编程方式来确定)

个人理解:
Java通过限制对象继承的单根继承机制与对象创建的动态内存分配方式
使得所有对象都继承自单根基类Object且只能在对上被创建
使得Java编程的过程更为简单,可以减少决策量与障碍量

1.11 异常处理:处理错误

异常处理将错误处理直接置于编程语言中,有时甚至置于操作系统中

异常是一种对象,其从错误点被“抛出”,并被专门设计为用于处理特定类型错误的相应的异常处理器“捕获”
异常不能被忽略,因而保证其一定在某处得到处理
此外,异常提供了一种从错误状态进行可靠恢复的途径

  • TODO: #5 : Java异常处理机制理解

Java的异常处理特别之处在于:

  1. Java从最开始就内置了异常处理
  2. Java的异常处理必须使用,且是唯一可接受的错误报告方式

1.12 并发编程

源自计算机编程中的一个基本概念:
同一时刻处理多个任务的思想

许多程序设计问题要求程序可以停下正在做的工作(可以称为中断),转而处理其他问题,再返回主进程
有时中断对于时间性强的任务是必需的,不过对于大量其他问题,仅仅是想要将问题进行切分,划为多个可独立运行的任务,从而提高程序的响应能力
以上描述中,程序中的彼此独立运行的部分称为线程,而以上进行划分的概念就是并发

但其中存在一个隐患:共享资源
即如果多个并行任务试图要访问同一项资源,就会出现问题
解决方案是,将可以共享的资源,在使用期间进行锁定

因此整个过程可以描述为:

锁定
完成任务
任务A
某项资源
释放资源锁
其他任务可以使用

Java的并发是内置于语言中的

1.13 Java与Internet

Java的最为重要意义之一就是其解决了在万维网(WWW)上的程序设计问题

本节简单的讲述了Java在Internet中发挥重要作用的背景与方面
大致分为以下几个部分

  1. 解释Web的概念
    1. 客户/服务器计算技术
    2. Web就是一台巨型服务器
      Web的“服务器-浏览器”设计概念
  2. 客户端编程的相关问题与方法概述
    1. 插件(plug-in)
    2. 脚本语言(scripting-language)
      典型代表JavaScript(注意虽然名字比较像,但是和java只存在表面上的相似)
    3. Java
      1. applet
      2. Java Web Start
    4. 备选方案
      Macromedia的Flex(和我们之前熟悉的Flash Player有关)
    5. .NET和C#
  3. 服务器端编程
    Java取得巨大成功的因素之一
    本书中不太涉及

1.14 总结

面向过程编程语言程序通常的模样:数据定义和函数调用
这些程序容让人迷惑,因为其表示术语更加面向计算机而非所要解决的问题

OOP,以Java来说,其程序中我们所见的只有关于以下两部分内容的定义:

  1. 用以表示问题空间概念的对象
    更多是面向问题的内容和方法而非有关计算机表示方式的相关内容
  2. 发送给这些对象的用来表示在此空间内的行为的信息

OOP的这个特性,极大的便于人们阅读程序——对于设计良好的程序,仅仅是阅读其就可以很容易的理解代码
并且,类库的更多重用,也可以较大程度上减少代码量

最后,OOP和Java也只是编程的一种解决方式
最重要的还是评估我们的需求,选择合适的方式


写在最后

本文章仅用于交流学习使用,本人学习尚浅,如有偏差错误,欢迎指正。也欢迎一起交流学习~
本人Java学习GitHub代码库:Programing_OOP

机器学习教程 之 半监督学习 Co-training 协同训练 (论文、算法、数据集、代码) 这篇博客介绍的是一篇用于半监督分类问题的方法: 协同训练 Co-training, A. Blum and T. Mitchell, “Combining labeled and unlabeled data with co-training,” in Proc. of the 11th Annual Conf. on Computational Learning Theory, 1998.,这算是半监督领域里面始祖级的论文了,是1998年两位CMU大佬提出的方法。 之前还写过一篇关于Tri-trainin 阅读详情

相关推荐

STC51单片机串口多字节数据接收的优化策略

本文深入探讨了STC51单片机串口多字节数据接收的优化策略。针对数据丢包、粘包等常见痛点,核心思路是采用“缓冲队列+定时器超时”模式,将实时处理转变为“先收纳,后处理”。文章详细讲解了硬件初始化、中断服务程序优化(快速入队与激活超时裁判)以及主循环的非阻塞设计,并进阶介绍了环形缓冲区实现与错误处理,旨在构建稳定可靠的串口通信系统。

weixin_29264201的博客 364

Java之编程思想路径

678

Richard_666的博客 774

Spark 大数据环境搭建( Linux 系统安装和配置)

(1)选择典型安装(2)选择“安装程序光盘映像文件(iso)”,点击右侧的浏览按钮, 找到下载好的iso 文件,然后点击下一步。(3)将全名、用户名、密码、确认等几项均设为“spark”, 方便后面使用,然后点击下一步。(4)在命名虚拟机的窗体中,可以设定一下虚拟机名称或直接按默认,然后点击下一步。(5)在指定磁盘容量的窗体中,设定虚拟机使用的最大磁盘大小为60GB,虚拟机文件尺 寸是在使用过程中按需增长的,最大限制为 60GB。

2301_80186825的博客 1601

《java编程思想》学习笔记+知识点 目录

参考:机械工业出版社《java编程思想》第四版。第18章 Java I/O 系统。第22章 图形化用户界面(略)第12章 通过异常处理错误。第17章 容器深入研究。第2章 一切都是对象。第4章 控制执行流程。第5章 初始化与清理。第6章 访问控制权限。

皮皮偷偷看了你一眼, 跑了..... 401

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

使用PyTorch设计卷积神经网络(CNN)来处理遥感图像Indian Pines数据集

XAX520_1314的博客 2485

通俗讲解清楚光线追踪中的蒙特卡洛积分

彻底讲解光线追踪中的蒙特卡洛积分

qq_37366618的博客 1239

Java编程思想目录

1、对象导论 2、一切都是对象 3、操作符 4、控制执行流程 5、初始化与清理 6、访问权限控制 7、复用类 8、多态 9、接口 10、内部类 11、持有对象 12、通过异常处理错误 13、字符串 14、类型信息 15、泛型 16、数组 17、容器深入研究 18、java I/O系统 19、枚举类型 20、注解 21、并发 22、图形用户界面 ...

芝兰生于深谷,不以无人而不芳 4660

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)

本文提供了一份详细的Simulink仿真指南,手把手教你从零开始搭建交流异步电机矢量控制模型。内容涵盖主电路搭建、坐标变换实现、双闭环PI调节器设计、转子磁链观测器调试等核心步骤,并附有完整的仿真文件,帮助读者跨越理论到实践的鸿沟,掌握高性能电机控制系统的建模与仿真技能。

pz890123的博客 658

巨著《Java 编程思想》新版终于来啦

老版《Java编程思想》(原书名《Thinking in Java》)得益作者开放深度研讨的创作方式,受到了全世界读者的追捧,被译为了十几种语言。但遗憾的是,在经历了 4 个版本的更新后,其最后一版发布于 2007 年,之后再无更新。直至 Java 8 发布,随着大量新特性的发布,原书作者 Bruce Eckel 觉得很有必要重塑这本经典的《Java编程思想》,于是重新动笔完成了最新版本《On Java》, 一经发布就得到了读者的高度关注。

hacker707的博客 2万+

《多模态融合改进》目录一览 | 专栏介绍 :全网 第一份 完整的多模态改进教程,提供《多模态模型改进完整项目包》-开箱即用

在大家订阅专栏后,便可获得多模态模型改进完整项目包-开箱即用,方便简单

Limiiiing的博客 1万+

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

算法如诗的博客 250

Java编程思想笔记目录

祝各位 程序???? 节日快乐???? ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020102311591445.gif#pic_center) 写在前面:   前阵子,小名“偷偷地”发了一批文章,是小名的一些读书笔记✍,那么为什么要把笔记发出来呢,嘻嘻,当然是小名的????不太灵光啦????但是吧,小名坐地铁或者走在大街上的时候,脑袋里总是会想一些有的没的,不排除会想一些Java基础的知识,时常联系不起来,就有可能别扭一整天。所以呢,把它发出来一方面是为了和大

小名同学 23万+

[Dify实战] 合同审阅助手:识别风险条款、生成修改建议-带绑定资源

摘要: Dify合同审阅助手通过AI技术提升合同审阅效率,快速识别风险条款并输出结构化修改建议。方案包括合同输入、关键条款识别、风险评级和报告生成流程,重点关注付款、责任限制等核心条款。采用分层风险分级(高/中/低)和"红线清单"机制,确保审阅标准化。实施建议先建立条款库和模板,通过样本测试优化模型,定期更新规则库。该方案可缩短审阅时间50%以上,提高风险识别准确率,最终实现法务经验的可复用沉淀。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 582

OOP丨《Java编程思想》阅读笔记Chapter 7 : 复用类

Thinking In Java Chapter 7 read note

TheSumSt的经验站 769

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OOP丨《Java编程思想》阅读笔记Chapter 5 : 初始化与清理

Thinking In Java Chapter 5 read note

TheSumSt的经验站 908

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OOP丨《Java编程思想》阅读笔记Chapter 6 : 访问权限控制

Thinking In Java Chapter 6 read note

TheSumSt的经验站 889

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Chapter 1 对象导论

Chapter 1 对象导论 作者:使劲扑腾的笨鸟 转载、引用或截图,请标明出处。 1.【重X】概念区分:重写、重载、重用、重构。 1.1 重写(override):多态的表现形式。发生于【继承】,子类重写父类方法。(又称“覆盖”“覆写”)。见Chapter 5 1.2 重载(overload):多态的表现形式。发生于【同一个类】或【继承】。见Chapter 7   返回值 ...

weixin_42792400的博客 162

Chapter01_对象入门

计算机革命起源于机器。因此程序语言的起源似乎就是为了看起来要像那种机器。但是,计算机同机器相比毕竟还是存在很大区别的,因为它们属于思想放大工具。正如斯蒂芬-乔布斯常说的那样 ------“它是思想的坐骑”,是一种不同种类的表达媒体。因此,这种工具越来越不象一种机器而是逐渐倾向于成为我们思想的一部分。同时,它也越来越象其他传统的表达方式比如书写绘画雕刻动画和电影等等。在计算机向一种全方位的思想表达载...

junife的专栏 140

TIJ学习笔记(一)——OOP

这是Thinging in Java学习笔记的第一篇,主要是写了OOP是什么。 第一次写肯定有许多不足的地方,欢迎斧正。 Object &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要了解什么是OOP(Object-oriented programming),首先需要了解什么是Object 下面引用甲骨文官方文档对Object的解释 Real-...

AlbumenJ的博客 436

Professional C++ (Chapter 1 - A Crash Course in C++)

Chapter 1 - A Crash Course in C++第一章 C++速成班 The goal of this chapter is to cover briefly the most important parts of C++ so that you have a base of knowledge before embarking on the rest of the

Logan_hust的专栏 995

哈工大软件构造u5Chapter 5: Reusability-Oriented Software Construction Approaches 第5章:面向重用的软件构建方法

Chapter 5: Reusability-Oriented Software Construction Approaches 第5章:面向重用的软件构建方法 5.1 Metrics, Morphology and External Observations of Reusability 可复用性的度量、形态与外部表现 第3章介绍了软件构造的核心理论(ADT)与技术(OOP),其核心 是保证代码...

天才_hhh的博客 281

CPU 缓存 | 原理、映射、一致性

……

u013669912的博客 402

RustMark v0.4:内核可扩展性 — Rust Trait 系统与标准库 Trait 深度实战

核心痛点:Rust 没有类继承,如何实现代码复用与多态?Trait 系统提供了一套比传统 OOP 更强大、更安全的多态范式,但初学者常被关联类型、Trait Bound、impl Trait 等概念困住,更难以理解何时该用 Box、何时该用泛型。前置知识:需掌握 Rust 基础语法、所有权与借用(本系列第一篇)、枚举与模式匹配(第二篇)、泛型与集合(第三篇)。系列阶段:入门篇 第 5 篇(共 5 篇),RustMark 版本号 v0.4。收获能力。

我的博客 305

【读书笔记】Java编程思想 - Thinking In Java

Thinking In Java 读书笔记

qq_40690815的博客 753

《Java编程思想》 布鲁斯·埃克尔

Java编程思想》是一本全面而深入地介绍Java编程语言和面向对象编程思想的经典著作。从Java的基础语法到最高级特性,从面向对象设计原则到实际编程实践,这本书为Java开发者提供了一个系统的学习路径和深入的思考方式。对于Java初学者,这本书提供了扎实的语言基础和面向对象编程的入门知识;对于有一定经验的Java开发者,这本书则深入探讨了面向对象设计原则和高级特性,帮助他们提升编程水平和设计能力;对于Java教学工作者,这本书也是一个宝贵的参考资料,可以用于课堂教学和学生自学。

hopsky的博客 199

Java编程思想读书笔记(一)第1~13、16章

目录: Java编程思想(一)第1~13、16章 Java编程思想(二)第14章-类型信息 Java编程思想(三)第15章-泛型 Java编程思想(四)第17章-容器深入研究 Java编程思想(五)第18章-Java IO系统 Java编程思想(六)第19章-枚举类型 Java编程思想(七)第20章-注解 Java编程思想(八)第21章-并发 第1章 对象导论 1.1

leonliu06的博客 4万+
上一篇: C/C++丨自增自减在运算表达式和函数参数中的情况分析
下一篇: 日常电脑使用丨我要成为浏览器(使用)高手:从Edge浏览器的外观设置到快捷键等基础功能的使用
TheSumSt
博客等级 码龄10年 200粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值