面向对象编程(oop)
java 程序绝大部分基于创建数据类型,核心就是“对象”。java基本数据类型主要是数字运算的,而自定义数据类型很大程度扩展了java的应用范围。
数据类型(data type), 定义了一组值,以及作用在这组值上的操作
抽象数据类型( abstract data type), 即用户不可见到其内部值的数据类型
对象(objects), 数据类型的实例。
应用程序接口(API),用于具体化(实例化)抽象数据类型的操作,包括构造方法(函数),成员方法。例如,
public class Counter {
Counter(String id) ;
void increment() ;
int tally();
String ToString()
}
抽象数据类型的使用, 用户不需要了解数据类型实现的具体过程也能使用
创建对象: 调用构造函数 new。每当用户使用 new,系统就为对象分配一个内存空间,执行初始化,并返回该对象的一个引用
Counter heads = new Counter("heads")
成员方法: 具有静态方法的所有特征,参数按值传递,方法名可重载。另外调用方法与对象有关,如下:
heads.tally()
使用对象:
a 声明该类型的变量,该变量是该类型的一个引用
b 调用构造函数
c 调用成员方法
赋值语句:
赋值实现了对象引用的拷贝,而并非新建了一个对象,即别名。等号两边的变量,都引用同一个对象
Counter c1 = new Counter("ones");
c1.increment();
Counter c2 = c1; //
c2.increment();
对象参数:
对象作为方法的参数,java按值传参,即从调用方法中拷贝参数值给被调方法。如果参数是对象的引用,那么java仍将拷贝该引用作为方法的参数。此时,方法可以访问(修改)对象了,当然不是通过原始的对象引用。
对象作为方法的返回值,由于java只允许有一个返回值,那么返回一个对象,实际上就可以返回多个值了。
数组也是对象,java中任何非基本类型的值都是某对象的值。比如,数组。所以当我们使用数组作为返回值,或者方法参数时,我们实际上是使用该数组的引用的拷贝
对象数组:使用[]数组构造函数创建该数组;然后数组中每个元素都使用标准构造函数创建。
抽象数据类型的实现
比如用java类实现抽象数据类型(ADT),代码就写在一个与类名相同的文本中,该文本扩展名是.java。 该文本中最初的语句声明定义了该类(数据类型)的成员变量,之后就是构造函数,成员方法。
成员变量:声明成员变量就像声明局部变量,每个声明加一个可见的修饰符,比如private。
构造函数(构造器):创建对象标示,并初始化其成员变量。构造器一般与类同名,支持重载,即可以有多个构造器。
成员方法:具体化该数据类型的操作。每个成员方法包括一个返回值类型,标示符,实现{}。
设计抽象数据类型
封装:打包数据类型的实现
API设计:API有助于清晰化输入和输出,但不容易。总之,API就是提供用户他们需要的方法,除此以外都不做。
算法与抽象数据类型(ADT): 数据抽象有助于算法研究,adt提供了一个框架而非细节。
继承:父类-子类
内存管理: 特点垃圾回收
不变数(immutability)据类型: 该类对象值从构造之后就不发生变化。可使用final 修饰符限制某变量为immutability
异常