“核心技术:对象与类”的版本间差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
 (→类之间的关系)  | 
				 (→使用预定义类)  | 
				||
| 第54行: | 第54行: | ||
== 使用预定义类 ==  | == 使用预定义类 ==  | ||
* 并非所有的类都具有面向对象特征;(如,Math、Date类,只封装了功能,没有也不需要隐藏数据)  | |||
=== 对象与对象变量 ===  | |||
# 构造器(constructor)是一种特殊的方法,用来构造并初始化对象;  | |||
# 构造器的名字应该与类名相同;  | |||
# 一个对象变量并不包含一个对象,而是引用一个对象;  | |||
# 局部变量不会自动地初始化为null,必须通过new或将其设置为null来进行初始化;  | |||
* Java中要获得对象的完整拷贝,应该使用“clone”方法;  | |||
=== Date 与 LocalDate 类 ===  | |||
<pre>  | |||
Date类的时间,使用一个固定时间点(纪元,epoch)的毫秒数(可正可负)来表示的;  | |||
纪元:UTC时间 1970年1月1日 00:00:00  | |||
UTC(Coordinated Universal Time),与GMT(Greenwich Mean Time,格林威治时间)一样。  | |||
</pre>   | |||
Date 类提供的日期处理并没有太大的用途。如“December 31, 1999, 23:59:59”这样的时间只是阳历的固有习惯,虽然遵循了世界上大多数地区使用的阳历表示法。但是,统一时间点采用中国的农历或希伯来的阴历表示就很不一样。<br/>  | |||
类库设计者决定将保存时间与给时间点命名分开,所以标准Java类库分别包含了两个类:  | |||
# 一个是用来表示时间点的'''Date'''类  | |||
# 另一个是用来表示大家熟悉的日历表示法的'''LocalDate'''类  | |||
*(Java SE 8 引入了另一些类来处理日期和时间的不同方面)  | |||
将时间与日历分开就是一种很好的面向对象设计。  | |||
关于LocalDate的使用:  | |||
* 不要使用构造器来构造LocalDate的对象,而应该使用静态工厂方法;  | |||
# 用当前时间构造一个新对象:  | |||
#: <syntaxhighlight lang="java">  | |||
LocalDate.now()  | |||
</syntaxhighlight>  | |||
# 提供年月日来构造一个特定时间的对象:  | |||
#: <syntaxhighlight lang="java">  | |||
LocalDate.of(1999, 12, 31)  | |||
</syntaxhighlight>  | |||
# 将构造的对象保存在一个对象变量中:  | |||
#: <syntaxhighlight lang="java">  | |||
LocalDate newYearEve = LocalDate.of(1999, 12, 31);  | |||
</syntaxhighlight>  | |||
# 有了LocalDate对象,就可以使用getYear、getMonthValue、getDayOfMonth来得到年、月、日,以及其他操纵日历的方法:  | |||
#: <syntaxhighlight lang="java">  | |||
int year = newYearEve.getYear();  | |||
...  | |||
</syntaxhighlight>  | |||
* '''不应该使用Date类中诸如getYear、getMonth、getDay等方法'''。  | |||
* 调用后会修改对象状态的方法是“更改器方法”,只访问对象而不修改对象的方法是“访问器方法”  | |||
== 用户自定义类 ==  | == 用户自定义类 ==  | ||
2020年10月16日 (五) 18:31的版本
oop
面向对象的程序时由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。
- 面向对象:
 - 面向过程:
 - 面向切面:
 
类 与 对象
- 类是构造对象的模板或蓝图,对象是类的实例化
 - 由类构造(construct)对象的过程称为创建类的实例(instance)
 - 封装(encapsulation,有时称为数据隐藏):将数据(实例域,instance field)和行为(方法,用于操纵数据)组合在一个包中,并对对象的使用者隐藏了数据的实现方式
 - 对象的实例域的几个就是这个对象的当前状态(state)
 - 通过扩展一个类来建立另一个类的过程称为继承(inheritance)
 
- “Object”是所有类的超类
 - 对象状态的改变必须通过调用方法实现(封装的意义)
 - 开发过程中,分析问题中的名词对应着类和类的实例域,动词对应着类的方法;
 
类之间的关系
- 依赖(“uses-a”):一个类的方法操纵另一个类的对象
 - 聚合(“has-a”):一个类中包含另一个类的对象
 - 继承(“is-a”):一个类由另一个类扩展而来
 
实例(UML)
关联(Association)
聚合(Aggregation)
组合(复合,Composition)
- 聚合的成员可独立,复合的成员必须依赖于整体才有意义
 
泛化(Generalization)
泛化指的是类与类之间的继承关系和类与接口之间的实现关系。
使用预定义类
- 并非所有的类都具有面向对象特征;(如,Math、Date类,只封装了功能,没有也不需要隐藏数据)
 
对象与对象变量
- 构造器(constructor)是一种特殊的方法,用来构造并初始化对象;
 - 构造器的名字应该与类名相同;
 - 一个对象变量并不包含一个对象,而是引用一个对象;
 - 局部变量不会自动地初始化为null,必须通过new或将其设置为null来进行初始化;
 
- Java中要获得对象的完整拷贝,应该使用“clone”方法;
 
Date 与 LocalDate 类
Date类的时间,使用一个固定时间点(纪元,epoch)的毫秒数(可正可负)来表示的; 纪元:UTC时间 1970年1月1日 00:00:00 UTC(Coordinated Universal Time),与GMT(Greenwich Mean Time,格林威治时间)一样。
Date 类提供的日期处理并没有太大的用途。如“December 31, 1999, 23:59:59”这样的时间只是阳历的固有习惯,虽然遵循了世界上大多数地区使用的阳历表示法。但是,统一时间点采用中国的农历或希伯来的阴历表示就很不一样。
类库设计者决定将保存时间与给时间点命名分开,所以标准Java类库分别包含了两个类:
- 一个是用来表示时间点的Date类
 - 另一个是用来表示大家熟悉的日历表示法的LocalDate类
 
- (Java SE 8 引入了另一些类来处理日期和时间的不同方面)
 
将时间与日历分开就是一种很好的面向对象设计。
关于LocalDate的使用:
- 不要使用构造器来构造LocalDate的对象,而应该使用静态工厂方法;
 
- 用当前时间构造一个新对象:
LocalDate.now()
 - 提供年月日来构造一个特定时间的对象:
LocalDate.of(1999, 12, 31)
 - 将构造的对象保存在一个对象变量中:
LocalDate newYearEve = LocalDate.of(1999, 12, 31);
 - 有了LocalDate对象,就可以使用getYear、getMonthValue、getDayOfMonth来得到年、月、日,以及其他操纵日历的方法:
int year = newYearEve.getYear(); ...
 
- 不应该使用Date类中诸如getYear、getMonth、getDay等方法。
 - 调用后会修改对象状态的方法是“更改器方法”,只访问对象而不修改对象的方法是“访问器方法”
 







