02类与对象
一.什么是对象
我们说面向对象,那么对象是什么呢?它有什么特性呢?
对象是对客观事物的抽象,对状态与行为的(封装)包装.
封装,有时称为数据隐藏,从形式上看 ,不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
对象中的数据称为实例域(instance field),操纵数据的过程称为方法(method)。
对于每个特定的类实例,都有一组特定的实例域值。这些值的集合就是这个对象的当前状态。
以下是对象的三个特性:
- 对象的行为(behavior) --> 可以对对象施加哪些操作,或可以对对象施加哪些方法?
- 对象的状态(state)–> 当施加那些方法时,对象如何响应?
- 对象的标识(identity)–> 如何辨别具有相同的行为与状态的不同对象。
对象的状态可能改变,但是这个改变不是自发的,必须调用方法实现。
如果不经调用对象的方法便改变了对象的状态,说明对象的封装性遭到了破坏。
在Java中, 使用类(class)这样的概念来对现实事物进行抽象描述.
而对象, 则归属于某个类.
例如
同班的同学是"同学类", 而具体到同桌"张三",就是一个对象. 是一个有名字有性别等实例属性, 以及学习\运动等方法的具体个体.
二.静态方法
静态方法是一种不能向对象实施操作的方法
可以认为静态方法是没有this参数的方法
以下两种情况下使用静态方法:
- 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供。
- 一个方法只需要访问类的静态域。
NumberFormat工具类
静态方法还有另外一种常见的用途:使用静态工厂方法来构造对象。
NumberFormat类为什么不用构造器完成这些操作呢?主要有以下两个原因:
- 无法命名构造器。构造器的名字必须与类名相同。但是,这里希望将得到的货币实例和百分比实例采用不同的名字。
- 当使用构造器时,无法改变所构造的对象类型。而Factory方法将返回一个DecimalFormat类对象,这是NumberFormat的子类。
三.对象构造
【对象构造】
- 构造器的重载,重载解析. 方法的签名: 方法名及参数类型
- 默认域初始化: 如果在构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值:数值为0 \ 布尔值为false \ 对象引用为null
- 显式域初始化:在执行构造器之前,先执行赋值操作. 可以调用方法对域进行初始化.
- 调用另一个构造器: 需要构造器的第一个语句就调用另一个构造器, 即第一个语句就需要是 this(…)
- 初始化块: 在类的声明中,可以包含多个代码块; 只要构造类的对象,这些块就会被执行.首先运行初始化块,然后才运行构造器的主体部分.
由于初始化数据域有多种途径,列出构造过程的所有路径可能相当混乱.
下面是调用构造器的具体处理步骤:
1. 所有数据域被初始化为默认值
2. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块
3. 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
4. 执行这个构造器主体