文档章节

《java编程思想》学习笔记—对象导论

一个yuanbeth
 一个yuanbeth
发布于 2017/09/03 09:12
字数 1970
阅读 8
收藏 0

1.1抽象过程

1、人们所能解决的问题的复杂性直接取决于抽象的类型和质量。

2、对象具有状态,行为和标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,具体来说,就是每一个对象在内存中都有一个唯一地地址。

1.2每个对象都有一个接口

1、面向对象程序设计的挑战之一,就是问题空间的元素和解空间的对象之间创建一对一的映射。

2、每个对象都只能满足某些请求,这些请求由对象的接口所定义,决定接口的便是类型。

3、接口确定了对某一特定对象所能发出的请求,但是,在程序中必须有满足这些请求的代码,这些代码与隐藏的数据一起构成了实现。

4、在类型中,每一个可能的请求都有一个方法与之相关联,当向对象发送请求时,与之向关联的对象就会被调用。

5、UML,每个类都用一个方框标识,类名在方框的顶部,任何数据成员都描述在方框的中间部分,法法在方框的底部。

参考博客:https://my.oschina.net/fuyong/blog/717505

1.3每个对象都提供服务

程序本身想用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。

在良好的面向对象设计中,每个对象都可以很好的完成一项任务,但它并不试图做更多的事。

1.4被隐藏的具体实现

1、访问控制的第一个存在原因就是让客户端程序员无法触及他们不应该触及的部分。

2、访问控制的第二个存在原因就是允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员。

3java用三个关键字在类的内部设定边界:

public:任何人都可访问

private:创建者和类型的内部方法可访问

protected:创建者,类型的内部类方法,以及继承的类可以访问,但是不能访问private成员。

没有任何限定词时:包内可以访问

1.5复用具体实现

1、最简单地复用某个类的方式就是直接使用该类的一个对象,此外也可以将那个类的一个对象置于某个新的类中。

2、使用现有的类合成新的类,这种概念被称为组合,如果组合是动态发生的,那么它统称被称为聚合。

3、新类的成员对象通常都被声明为private,使得使用新类的客户端程序员不能访问它们。

4、理解组合和聚合的区别:

(1)组合视为has-a(拥有)关系:例如公司由多个部门组成,公司不存在了,部门也就不存在了

(2)聚合:例如一个部门由多个员工组成,如部门不撤销了,人不会消失

1.6继承

1、有两种方法可以使基类和导出类产生差异:

(1)一种方法非常直接:直接在导出类中添加新方法。

(2)改变现有基类的方法的行为,这被称之为覆盖。

2、继承会继承父类的所有成员,包括private成员

3、“是一个”与“像是一个”关系

是一个:用一个导出类对象来完全代替一个基类对象(称之替代原则);

像是一个:扩展接口,即再到处类型中添加新的接口元素。这个新的类型仍然可以替代基类,但这种替代并不完美,因为基类无法访问新添加的方法。

1.7伴随多台的可互换对象

调用基类的方法,怎么知道具体的子类方法? 后期绑定:为了执行后期绑定,Java使用一小段特殊的代码来替代绝对地址调用。这段代码使用再对象中存储的信息来计算方法体的地址。这样根据这一小段代码的内容,每一个对象都可以具有不同的表现行为。当向对象发送消息时,该对象就知道能够知道这条消息应该做些什么。

1.8单根继承机构

java所有的类最终都继承单一的基类,即Object

1.9容器

1、为什么要使用容器?

由于不知道解决某个特定问题时需要多少个对象,或者他们讲存活多久,所以创建另一种对象型类型,这种新的对象类型持有对其他兑现的引用,在任何需要时都可以扩充自己以容纳你置于其中的所有东西。

2、为什么容器有多种类型?

(1)不同容器提供了不同类型的接口和外部行为。

(2)不同的容器对于某些操作具有不同的效率

3、参数化类型(泛型) (1)单根继承意味着所有东西都是object类型,所以可以存储object的容器可以存储任何东西。

(2)存储object,所以当将对象引用置入容器时,它被向上转型为object,因此它会丢失其身份。当把它取

回时,就获取了一个对object对象的引用,而不是对置入时的那个类型的对象的引用。怎样才能将它变回先

前置入容器时的具有实用接口的对象呢?

一种方法是向下转型(不安全)

另一种方式便是实用泛型,泛型是一个编译器可以自动定制作用于特定类型上的类。例如,通过使用泛型,

编译器可以定制一个只接纳和取出shape对象的容器。

关于基类怎么调用子类的方法,可参考如下博客:

https://my.oschina.net/u/2427561/blog/1526877

1.10对象的创建和生命期

1、C++创建对象在堆栈或静态区域。

2、java是在堆的内存池中动态的创建对象。

3、在堆栈中创建存储空间和释放存储空间通常需要一条汇编指令即可,分别对应将栈顶指针向下移动和将

栈顶指针向上移动。创建对存储空间的时间以来于存储机制的设计。

4、对于允许在堆栈上创建对象的语言,编译器可以确定对象存活的时间,并可以自动销毁它。然而,如

果是在堆上创建对象,编译器就会对它的生命周期一无所知。

5、java垃圾回收器被设计用来处理内存释放问题,但不包括清理对象的其他方面。

1.11异常处理:处理错误

1、异常时一种对象,它从出错点被“抛出”,被被专门设计用来处理特定类型错误的应用的异常处理器“捕

获”。

2、异常处理就想是与程序正常执行路径并行的,在错误发生时执行的另一条路径。

3、异常不能被忽略,所以它保证一定会在某处得到处理。

4、异常提供了一种从错误状况进行可靠回复的途径。

5、异常处理不是面向对象的特征。

1.12并发编程

java的并发是内置于语言中的。

1.13java与Internet

© 著作权归作者所有

共有 人打赏支持
一个yuanbeth
粉丝 82
博文 112
码字总数 68180
作品 0
深圳
程序员
私信 提问
那些年,关于 Java 的那些事儿

版权声明:Follow your heart and intuition. https://blog.csdn.net/qq_35246620/article/details/78695893 温馨提示:本系列博文(含示例代码)已经同步到 GitHub,地址为「java-skills」,...

维C果糖
2017/12/02
0
0
fbf的书单,欢迎分享,欢迎更新

本人看过的以下书值得推荐的,列出来的就是值得推荐的 这个颜色是一般推荐 这个颜色是强烈推荐 这个颜色是神作,收藏吧 物联网:生产力的变革 李虹著 开拓视野,一般 源码中国:全球IT外包新原...

fbf
2015/03/16
0
0
Java编程思想 第1章 对象导论

Bruce Eckel 前辈写的《Java编程思想》把问题探讨得非常深入,非常建议同行都学习一下。学习 Java 语言时,老师告诉你 What,自己练习知道 How ,Bruce Eckel 告诉你Why 。 之前已经把后面的...

木云凌
2016/02/23
0
0
Scala学习笔记(1):Scala语言的来源

Scala是“scalable language”,也就是“可扩展”语言是意思。Scala是一种静态类型语言,它融合了函数式编程和面向对象编程和的思想,前者让它可以很方便快速地构建可用程序,后者则让其具有...

chengyao2
2013/04/28
0
0
JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52724939 JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千! 经过了几...

Aduroidpc
2016/10/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ui2code中的深度学习+传统算法应用

背景 在之前的文章中,我们已经提到过团队在UI自动化这方面的尝试,我们的目标是实现基于 单一图片到代码 的转换,在这个过程不可避免会遇到一个问题,就是为了从单一图片中提取出足够的有意...

阿里云官方博客
33分钟前
2
0
1-2 【包子mysql系列】, 对mysql的innoDB加锁分析

innoDB的事务,是基于锁来实现的,用到事务不自然就会用到锁,而如果对锁理解的不通透,很容易造成线上问题。 数据库加锁的分析,和事务的引擎,隔离级别,索引,主键索引都有关系, 如果去考...

爱吃大肉包
47分钟前
0
0
插入排序

/** * 插入排序 * @Title: insert * @Description: TODO(这里用一句话描述这个方法的作用) * @param 参数 * @return void 返回类型 * @throws */ static void insert(int[] arr ){ for(int i......

yzzzzzzzz
49分钟前
3
0
python Kmeans算法解析

一. 概述 首先需要先介绍一下无监督学习,所谓无监督学习,就是训练样本中的标记信息是位置的,目标是通过对无标记训练样本的学习来揭示数据的内在性质以及规律。通俗得说,就是根据数据的一...

终日而思一
49分钟前
2
0
Nginx+Keepalived实现站点高可用

Nginx+Keepalived实现站点高可用

吴伟祥
50分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部