第一章:对象导论——一个月搞定《Java编程思想》读书笔记

20200331
本人算是个Java初学者,知识储备仅限于大学课堂上教过的C语言知识,而且也都忘的差不多了。Java基础一直都很不牢靠,全是写一点查一点。最基本的那些类型都不会用,也是没谁了。。。
估计返校开学还有不到一个月左右的时间,这次买了本《Java编程思想第四版》好好补习一下。学到枚举为止,窗体程序就先不看了,预计30天,每天25页,每天晚上把所学整理到博客上,以便记录和分享。希望自己利用好闲暇时间,打好基础。
看到网上PDF版有很多,就自己转了一个DOCX的放在CSDN了,自己转的难免有错误,提前告知,还望海涵。但是在电子书上看方便多了

Java编程思想第四版DOCX

第一章:对象导论
20200401
“”为对原文的完全引用,其他格式是自己对原书知识点的总结或启发,如有错误之处还请前辈批评指正,感激不尽。

“我们之所以将自然界分解,组织成各种概念,并按其含义分类,主要是因为我们是整个口语交流社会共同遵守的协定的参与者,这个协定以语言的形式固定下来…除非赞成这个协定中规定的有关语言信息的组织和分类,否则我们根本无法交谈。–Benjamin Lee Whorf(1897-1941)”
“计算机革命起源于机器,因此,编程语言的产生也始于对机器的模仿。”
众多表达形式(包括OOP),已经不像机器而更像我们头脑的一部分,那么信息流的新形式或者新的理解将会是怎样的呢? 想来AI未必会取代人类,很有可能会通过脑机接口与人结合,不过那个时候说不定人就不再是人了,会因接受新的特性而丧失现在的一些。想想感觉挺有趣的,会是什么呢?

“所有编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量。”
“程序员必须建立起在机器模型(解空间)和实际待解决问题的模型(问题空间)”之间的关联(映射)。”
假如可以自己产生关联,而不需要建立映射岂不是很爽。。让待解决问题与可能的解决方案自动关联,也就自动解决了。。。想想就很棒

“我们将问题空间中的元素及其在解空间中的表示称为对象。但,你还需要一些无法类比为问题空间元素的对象”比如数据库中表示关联的表,在日常使用的过程中,想想还有什么。

Alan Kay 总结的Smalltalk的五个基本特性:
1.万物皆为对象
2.程序是对象的集合,通过发送消息来告知彼此所要做的
3.每个对象都有自己的由其它对象所构成的存储
4.每个对象都拥有其类型 :每个类最重要的区别于其他类的特性就是“可以发送什么样的消息给他”
5.某一特定类型的所有对象都可以接收同样的信息

“对象可以存在于不同的机器和地址空间中,它们还可以被存储在硬盘上。在这些情况下,对象的标识就必须由内存地址之外的某些东西来确定了。”

UML(Unified Modeling Language,统一建模语言)形式的图。可以去学一下

“类创建者创建的类只向客户端程序员暴露必需的部分,而隐藏其他部分,这意味着类创建者可以任意修改被隐藏的部分”

access specifier:public,protected,private,默认是包访问权限,包内public,包外private

扫描二维码关注公众号,回复: 10995511 查看本文章

“代码复用”
“1.直接使用该类的一个对象;2.将那个类的一个对象置于某个新类中,称之为创建一个“成员对象”
“新类的成员对象通常都被声明为private,使得使用新类的客户端程序员不能访问他们”
???运行时修改这些成员对象,动态修改程序????
“在建立新类时,应先考虑组合”

“对象这种观念,使得你可以通过“概念”将数据和功能封装到一起”

extends
“可以创建一个基类类型来表示系统中某些对象的核心概念,从基类型中导出其它类型,来表示此核心可以被实现的各种不同方式”
“以同样的术语将解决方案转换成问题是大有裨益的”

“所有可以发送给基类对象的消息同时也可以 发送给导出类对象,这也就意味着导出类与基类具有相同的类型”
“有两种方法可以使基类与导出类产生差异:1.在导出类中添加新方法,但是应该考虑基类是不是也需要这种新添加的方法 2.Overriding,改变现有基类的方法行为,覆盖”
“能够 is-a 尽量不要 is like-a”

多态
方法操作的都是泛化generic的形状,而不关心具体是什么形状。完成代码的统一表述,真爽
“这样的代码是不会受添加新类型影响的”

“一个非面向对象编程的编译器产生的函数调用会引起所谓的前期绑定,然而在OOP中,程序直到运行时才能够确定代码的地址,所以为了处理泛化一类的,采用了后期绑定。”
“为了执行后期绑定,Java使用了一小段特殊的代码来替代绝对地址调用。这段代码使用在对象中存储的信息来计算方法的地址(???)”
“C++用virtual来实现动态绑定,但在Java中,动态绑定是默认的”
“与基类进行交互的代码与具体的类型是分离的(decoupled)”
“把将导出类看作是它的基类的过程称为向上转型(upcasting)”

单根继承机制
Object
“除C++外所有的OOP语言,都是单根继承”
“共用接口”
“一切归根到底都是相同的基本类型”
“不会因无法确定对象的类型而陷入僵局,对于系统级的操作(如异常处理)显得尤其重要,并给编程带来极大的灵活性”

容器:
“在任何需要时都可以扩充自己以容纳你置于其中的所有东西。只需要创建一个容器对象。然后让它处理i所有细节。”

不同的容器有不同的效率,学习的时候注意。

“向上转型是安全的,但是向下转型如果不确定具体类型,则很危险”

参数化类型 <>范型,非彼泛型,范型应是取规范类型之意

生命周期
”每个对象为了生存都需要资源,尤其是内存“

对象的数据位于何处?怎样控制生命周期?

“C++将对象置于堆栈或静态存储区内来实现。这种方式将存储空间分配和释放置于优先要考虑的位置”
“名为堆的内存池中动态的创建对象。这种方式中,直到运行时才知道需要多少对象,它们的生命周期如何,以及它们的具体类型是什么”
“动态方式有这样一个一般性的逻辑假设:对象趋于变得复杂,所以查找和释放资源存储空间的开销不会对对象的创建造成重大冲击”
“垃圾回收机制可以避免暗藏的内存泄露问题”
“Java的垃圾回收机制被设计用来处理内存释放的问题,但他不包括清理对象的其他方面”

“异常是一种对象,它从出错地点被抛出,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。异常处理就像是与程序正常执行路径并行的、在错误发生时执行的另一条路径”
“异常不能被忽略,所以它保证一定会在耨处得到处理”
“异常处理时Java中唯一可接受的错误报告方式。如果没有正确编写正确的处理异常的代码,那么就会得到一条编译时的出错信息”

并发编程
“最初,主进程的挂起是通过硬件中断来触发的,不能移植”
“彼此独立运行的部分称之为县城”
“隐患:共享资源。如果有多个并行任务都要访问同一项资源。某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源”

Java和Internet
C/S
系统具有一个中央信息存储池(central repository of information),用来存储某种数据,它通常存在于数据空中,你可以根据需要将它分发给某些人员或机器集群。客户/服务器概念的关键在于信息存储池的位置集中于中央
负载均衡
事务处理
任何小的延迟都会产生巨大的影响,为了将延迟最小化,减轻处理任务的负载,但有时也会使用所谓的中间件将负载分散给在服务器端的其他机器

物联网的话,规定一套规则和一种文件格式,发生连接即发送,包含调用接口,说明,和授权。自动生成对应的控制界面。准么样?我的意思是在设计所有能接入的设备时都这样规范化,然后统一自动实现。有时间想写个小程序试一下,就像是黑客 吗,就是有控制的被黑,互相黑

“Web其实就是一台巨型服务器”
“最初只有一个单向的过程,你对某个服务器产生一个请求,然后它返回给你一个文件,你的机器(客户机)上的浏览器软件根据本地机器的格式来解读这个文件。”
“向前一大步,一段信息不经修改就可以在任意型号的计算机上显示”
“浏览器并不具备显著的交互性,而且它趋向于使服务器和Internet阻塞,为了解决这个问题,首先做了诸如图形标准增强等方法,其余的由客户端编程来解决”

“服务器浏览器编程的交互性完全由服务器提供”

CGI(common gateway interface)通用网关接口?????
这部分好好看一下

这一部分可能有些已经过时,我也不清楚,没有相关知识,但是???这里开始我还是应该回去看一看,做做功课,至少了解其思想
因为不理解,所有很多就不再摘录了

“HTML优点快速加载,易于理解,缺点代码暴露给任何人去浏览或窃取”
“脚本提供了更容易更快捷的开发方式,在考虑复杂方案前,应先考虑脚本语言”

“Intranet”(企业内部网)

“很多问题都可以通过重用现有的类库代码而得到解决”
要改变下自己的思维,学习时可以努力知其所以然,但是在工作过程中,应当乐于成为调包侠,这是Java的优势所在,也可以大大提升效率,专注解决自己的问题。而很多时候,受限于我自身垃圾的水平和这个专业的特点,应当把学习分为工作性质的学习和深挖性质的学习。一旦明确自己在工作性的学习当中时,就一定要像构造函数一样明确自己的输入输出是什么,从而明确自己的学习深度。知识的海洋浩瀚无边,能够探寻原理当然快乐,但是工作时没有人该为你的快乐买单,有投入有需求就应该有产出,这是我极大的问题,必须改正,加油,奥里给!!!哈哈

所以看到这里的一起学习Java的同学们,如果也是要在工作中快速上手,那么我不建议你先看这本书,随便找个JDK文档或者什么速查的东西先去做就好了,我的这个博客也是拿出一些空余时间想来系统的学习整理一下,到时候感觉有价值的话回头在整理也不迟。

“OOP和Java也许并不适合所有的人。重要的是要正确评估自己的需求,并决定Java是否能够最好的满足这些需求,还是使用其他编程系统(包括你当前正在使用的)才是最好的选择。如果知道自己的需求在可预见的未来会变得非常特殊化,并且Java可能不满足你的具体限制,那么就应该去考虑其他选择。”
“即使仍旧选择Java,至少也要理解还有那些选项可供选择,并且为什么选择这个方向要有清楚的认识”

发布了14 篇原创文章 · 获赞 0 · 访问量 259

猜你喜欢

转载自blog.csdn.net/m0_46619073/article/details/105226027