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

1.1抽象过程

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

二、对象具备状态,行为和标识。这意味着每个对象均可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),而且每个对象均可以惟一地与其余对象区分开来,具体来讲,就是每个对象在内存中都有一个惟一地地址。程序员

1.2每一个对象都有一个接口

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

二、每一个对象都只能知足某些请求,这些请求由对象的接口所定义,决定接口的即是类型。安全

三、接口肯定了对某一特定对象所能发出的请求,可是,在程序中必须有知足这些请求的代码,这些代码与隐藏的数据一块儿构成了实现。并发

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

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

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

1.3每一个对象都提供服务

程序自己想用户提供服务,它将经过调用其余对象提供的服务来实现这一目的。对象

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

1.4被隐藏的具体实现

一、访问控制的第一个存在缘由就是让客户端程序员没法触及他们不该该触及的部分。

二、访问控制的第二个存在缘由就是容许库设计者能够改变类内部的工做方式而不用担忧会影响到客户端程序员。

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

public:任何人均可访问

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

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

没有任何限定词时:包内能够访问

1.5复用具体实现

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

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

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

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

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

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

1.6继承

一、有两种方法可使基类和导出类产生差别:

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

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

二、继承会继承父类的全部成员,包括private成员

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

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

像是一个:扩展接口,即再处处类型中添加新的接口元素。这个新的类型仍然能够替代基类,但这种替代并不完美,由于基类没法访问新添加的方法。

1.7伴随多台的可互换对象

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

1.8单根继承机构

java全部的类最终都继承单一的基类,即Object

1.9容器

一、为何要使用容器?

因为不知道解决某个特定问题时须要多少个对象,或者他们讲存活多久,因此建立另外一种对象型类型,这种新的对象类型持有对其余兑现的引用,在任何须要时均可以扩充本身以容纳你置于其中的全部东西。

二、为何容器有多种类型?

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

(2)不一样的容器对于某些操做具备不一样的效率

三、参数化类型(泛型) (1)单根继承意味着全部东西都是object类型,因此能够存储object的容器能够存储任何东西。

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

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

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

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

另外一种方式即是实用泛型,泛型是一个编译器能够自动定制做用于特定类型上的类。例如,经过使用泛型,

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

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

http://www.javashuo.com/article/p-mjyvwovq-hk.html

1.10对象的建立和生命期

一、C++建立对象在堆栈或静态区域。

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

三、在堆栈中建立存储空间和释放存储空间一般须要一条汇编指令便可,分别对应将栈顶指针向下移动和将

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

四、对于容许在堆栈上建立对象的语言,编译器能够肯定对象存活的时间,并能够自动销毁它。然而,如

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

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

1.11异常处理:处理错误

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

获”。

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

三、异常不能被忽略,因此它保证必定会在某处获得处理。

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

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

1.12并发编程

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

1.13java与Internet

相关文章
相关标签/搜索