java编程思想笔记(一):对象导论

面向对象

早期的程序语言与计算机底层结构有着紧密的联系,所以寻求一个真实问题的解决方法需要映射到计算机底层的操作指令。而面向对象的语言,解决一个问题对应的解空间是对象

面向对象程序设计方式的5个特性:

  • 万物皆为对象
  • 程序是对象的集合,对象之间通过发送消息来告诉彼此所要做的,发送消息其实就是调用对象的一个方法
  • 对象有自己的存储空间,由其他对象组成
  • 每个对象都有相应的类型,即每个对象都是一个类型(class)的实例(instance)
  • 某一特定类型的对象可以接收相同的消息

对象:状态(数据) + 行为(方法) + 标识
类:具有相同属性和行为的对象集合

对象提供接口,可以隐藏具体实现

对象可以由其他对象组合(has-a)

子类可以继承父类,并且可以新增方法或覆盖方法(is-a)

多态和向上转型

由于继承的特性,可以把派生类的对象看成是泛化的基类对象,在运行时根据对象的不同类型选择不同的代码执行,这就是多态性。

对于非面向对象编程的编译器,产生的函数调用会引起前期绑定,就是一个函数名会绑定到一个代码的绝对地址。而对于面向对象,会有动态绑定,编译器确保调用方法存在,被调用的代码在运行时确定。

在java中,会有一段代码通过对象中保存的信息计算实际代码的地址。

单根继承结构

java 中所有类都继承自单一的基类Object,这样可以方便参数传递,垃圾回收和异常处理(有确定的类型信息)等

参数化类型

在Java SE5之前,容器存储的对象都是Object类型,于是将对象放入容器需要向上转型,而取出时需要向下转型,但是向下转型不一定是安全的,可能会产生运行时异常,比如如下代码:

1
2
3
Dog d = new Dog();
Animal a = d;
Pig p = a;

于是,为了解决这个问题,有了参数化类型机制。如以下代码:

1
ArrayList<Integer> L = new ArrayList<Integer>();

对象生命周期

java中,对象都在堆上创建,当对象不再使用时,通过垃圾回收器自动释放内存。