-
面向对象程序设计(OOP)
- 类(class):构造对象的模板或蓝图。由类构造(construct)对象的过程称为创建类的实例(instance),对象中的数据称为实例域(instance field),操纵数据的过程称为方法(method)。
- 对象:对象的行为(behavior):对对象施加哪些操作方法;状态(state):当施加那些方法时,对象如何响应;标识(identity):如何辨识具有相同行为与状态的不同对象。
- 识别类:识别类的简单规则是在分析问题的过程中寻找名词,而方法对应着动词。
- 类之间常见关系:依赖、聚合、继承
-
使用预定义类
- 对象与对象变量:使用构造器(constructor)构造新实例,构造器名字应该与类名相同。因此,要想构造一个类对象,需要在构造器前面加上new操作符。
- Java类库中的Gregorian Calendar类。
- 更改器方法与访问器方法:要查询某类信息,调用该类的get方法;改变对象的状态则调用set方法。对实例域做出修改的方法称为更改器方法(mutator method ),仅访问实例域而不进行修改的方法称为访问器方法(accessor method)。
-
用户自定义类
1.构造器与其他方法有一个重要的不同。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
- 构造器与类同名
- 每个类可以有一个以上的构造器
- 构造器可以有0、1、多个参数,构造器没有返回值
- 构造器总是伴随着new操作符一起使用
!不要在构造器中定义与实例域重名的局部变量。例:
public Employee (String n, double s,...){
String name = n; //Error
double salary = s; //Error
}
此构造器将无法设置salary,此构造器声明了局部变量name和salary,这些变量只能在构造器内部访问,这些变量屏蔽了同名的实例域。
2.隐式参数和显示参数
- 隐式参数:出现在方法名前的类对象
- 显示参数:位于方法名后面括号中的数值
3.封装的优点:
- 可以改变内部实现,除了该类的方法之外,不会影响其他代码,解决设计上的缺陷。private、public、default、protected
- 更改器方法可以执行错误检查,直接对域进行赋值将不会进行这些处理。this指向当前对象。
!注意不要编写返回引用可变对象的访问器方法。如果需要返回一个可变对象的引用,应首先对它进行克隆(clone)。对象clone是指存放在另一个位置上的对象副本。
3.基于类的访问权限。方法可以访问所调用对象的私有数据。一个方法可以范文所属类的所有私有数据。
4.私有方法。在Java中,为了实现一个私有的方法,只需将关键字public改为private即可。
5.final实例域。可以将实例域定义为final,构建对象时必须初始化这样的域。final修饰符大都应用于基本(primitive)类型域,或不可变(immutable)类的域(如果类中的每个方法都不会改变其对象,这种类就是不可变的类)。如String就是一个不可变的类,对于可变的类,使用final修饰符可能会造成混乱。
使用类图描述类(参考工具:StarUML、Astah UML)。
注:
- +代表public,-代表private
- 属性名在前,后面跟着冒号和类型名
- 方法名在前,后面跟着冒号和返回值类型
- 如果有参数,参数类型写法同上
类和对象之间的关系:类是抽象的概念,仅仅是模板;对象是一个能看得见,摸得着的具体实体。
-
静态域与静态方法
1.静态域。如果将域定义为static,每个类中只有一个这样的域,而每一个对象对于所有的实例域都有自己的一份拷贝。
2.静态常量。public static void main(String[] args)另一个多次使用的静态常量是System.out
3.静态方法。静态方法是一种不能向对象操作的方法,可以认为静态方法是没有this参数的方法(在一个非静态的方法中this参数表示这个方法的隐式参数)。因为静态方法不能操作对象,所以不能在静态方法中访问实例域,但静态方法可以访问自身类中的静态域。在下面两种情况下使用静态方法:
- 一个方法不需要访问对象的状态,其所需参数都是通过显式参数提供
- 一个方法只需要访问类的静态域
4.工厂方法。NumberFormat类使用工厂方法产生不同风格的格式对象。不利用构造器完成相关操作的原因:①无法命名构造器。构造器的名字必须与类名相同。②当使用构造器时,无法改变所构造的对象类型。
5.main方法。
方法:为完成一个操作而组合在一起的语句组。内置方法:有JDK类库提供、需要导入相应的包。自定义方法:不带参数、带参数。
Math.ceil(x):向上取整x最接近的整数,取大于x的整数。
Math.floor(x):向下取整x最接近的整数,取小于x的整数。
- 定义方法
由方法名、返回值类型、参数列表和方法体组成。三要素:方法名、返回值类型、参数列表
修饰符 返回值类型 方法名([参数列表]){
//