万物皆为对象,将对象视为奇特的变量,它可以存储数据,除此之外,你还可以要求它在自身上执行操作。理论上讲,你可以抽取待求解问题的任何概念化构件(狗,建筑物,服务等),将其表示为程序中的对象。
程序是对象的集合,它们通过发送消息来告知彼此所要做的。要想请求一个对象,就必须对该对象发送一条消息。更具体地说,可以把消息想象为对某个特定对象的方法的调用请求。
每个对象都拥有其类型,按照通用的说法,”每个对象都是某个类的一个实例”。
某一特定的类型的所有对象都可以接受同样的消息。
任何程序都是你所设计的系统的一种仿真。
当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”
将程序开发人员按照角色分为类创造者(那些创建新数据类型的程序员)和客户端程序员(那些在应用中使用数据类型的类消费者)
访问控制
- public :表示紧随其后的元素对任何人都说可用的
- private :表示除类型创建者和类型的内部方法之外的任何人都不能访问的元素
- protected :与private作用相当,差别仅在于继承的类可以访问protected成员,但是不能访问private成员
- 不指定类型时,还有一种默认的访问权限,通常称为包访问权限,在这种权限下,类可以访问在同一个包中的其他类成员,但在包之外,这些成员如同指定了private一样
当继承现有类型时,也就创建了新的类型。这个新的类型不仅包括现有类型的所有成员(尽管private成员被隐藏了起来,并且不可访问),而且更重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息同时也会发送给导出类对象。
把将导出类看做是它的基类的过程称为向上转型。转型为一个基类就是在继承图中向上移动,即向上转型。
void doSomething(Shape shape){
shape.erase();
//...
shape.draw();
}
//Circle Triangle Line 继承Shape
Circle circle = new Circle();
Triangle triangle = new Triangle();
Line line = new Line();
doSomething(circle);
doSomething(triangle);
doSomething(line);
所有类都继承Object,单根继承结构保证所有对象都具备某些功能,使垃圾回收器的实现变得容易得多
在Java中,具有满足不同需求的各种类型的容器,例如List(用于存储序列),Map(也称为关联数组,用来建立对象之间的关联),Set(每种对象类型只持有一个),以及诸如队列,树,堆栈等更多的构件。多样性原因:1.不同容器提供了不同类型的接口和外部行为 2.不同的容器对于某些操作具有不同的效率。
由于容器只存储Object,所以当将对象引用置入容器时,它必须被向上转型为Object,因此它会丢失其身份。当把它取回时,就获取一个对Object对象的引用,而不是对置入时的那个类型的对象的引用。这时需要向下转型。
Java完全采用了动态内存分配方式。每当想要创建新的对象时,就要使用new关键字来构建此对象的动态实例
异常是一种对象,它从出错地点被”抛出”,并被专门设计用来处理特定类型错误的相应的异常处理器”捕获”。异常处理就像是与程序正常执行路径并行。
Java提供了被称为“垃圾回收器”的机制,它可以自动发现对象何时不再被使用,并继而销毁它。这一点同所有对象都是继承自单根基类Object以及只能以一种方式创建对象(在堆上创建)这两个特性结合起来