一.关于对象
1)万物皆为对象
2)程序是对象的集合,它们通过发送消息告知彼此所要做的
3)每个对象都有自己的由其他对象所构成的存储(可以通过创建包含现有对象的包的方式来创建新类型的对象)
4)每个对象都拥有其类型
5)某一特定类型的所有对象可以接受同样的信息
6)每个对象都有一个接口
7)每个对象都提供服务
二.访问控制
访问控制的存在原因:(1)让客户端程序员无法触及他们不应该触及的部分
(2)允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员
Java中在类内部设定边界的三个关键字:public,private,protected.除此之外还有一个默认的访问权限
public:任何人都可访问
private:只有类型创建者和类型内部方法可以访问
protected:可以被本包的类与其子类访问
默认:该类可以访问与其在同一个包下的其他类的成员,但不可以访问该包之外的成员
三.单根继承结构
java中的终极基类就是Object,这种单根继承结构有以下好处:
1)在单根结构继承结构中的所有对象都具有一个共用接口,所以它们归根结底都是相同的基本类型
2)单根继承结构保证所有对象都具备某些功能(所有对象可以很容易地在堆上创建,参数传递也得到了简化)
3)单根继承结构使垃圾回收器的实现变得容易得多,而垃圾回收器正是Java相对C++的重要改变
四.容器
Java中具有满足不同需要的各种类型的容器,例如:List(用于存储序列),Map(关联数组,用于建立对象之间的关联),Set(每种类型只持有一个),以及队列,数,堆栈等.
另外,对容器的使用还要有所选择,原因如下:
1)不同容器提供了不同类型的接口和外部行为.
正是因为这些差异,针对不同情况,某一个容器提供的解决方案就可能比其他容器的要灵活得多
2)不同容器对于某些操作具有不同的效率
例如:
ArrayList随机访问元素是一个花费固定时间的操作,而LinkedList随机选取元素时需要在列表中移动,访问越靠近表尾,耗时越长.另一方面,如果想在序列中间插入一个元素,LinkedList的开销就会比ArrayList小很多.
所以我们可以在开始时使用LinkedList构建程序,而在优化系统性能时改用ArrayList.
接口List所带来的抽象,把在容器之间进行转换时对代码产生的影响降到最小限度,这就是为什么常用:
List list = new ArrayList();的原因
五.对象的创建和生命期
1)Java在被称为堆的内存池中动态的创建对象.直到运行时才知道需要多少对象,它们的生命周期如何,它们的基本类型是什么.这些问题只能在程序运行时相关代码被执行到的那一刻才能确定.新对象可以在需要的时刻直接在堆中创建.
2)由于存储空间实在运行时被动态管理,所以需要大量时间在堆中分配存储空间,这可能要远远大于在堆栈中创建存储空间的时间,所以创建堆存储空间的时间依赖于存储机制的设计.
3)在类似于C++这样的语言中,必须通过编程方式来确定何时销毁对象,这可能会因为不能正确处理而导致内存泄露.而Java提供了"垃圾回收器"的机制,它可以自动发现对象何时不再被使用,并继而销毁它.
4)Java的垃圾回收器(自行判断对象何时不再被使用,并自动释放对象占用的内存),所有对象继承自单根基类Object以及在堆上动态的创建对象,三点特性结合起来,让Java编程的过程比C++编程要简单得多.
六.异常处理
1)异常是一种对象,它从错误地点被"抛出",并被对应的异常处理器"捕获",异常处理与程序正常执行路径并行,因此异常处理不会干扰正常的执行代码.
2)异常不能被忽略,它保证一定会在某处得到处理,它提供了一种从错误状况进行可靠恢复的途径.
3)Java内置异常处理,他是唯一可以接受的错误报告方式.
4)异常处理不是面向对象编程的特征(它在面向对象语言出现之前就已经存在)