对象与类

1. 类

类构造对象的过程称为创建类的实例。
封装:将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
实例域:对象中的数据。
方法(method):操纵数据的过程。
状态(state):实例域值的集合。
继承:扩展一个类来建立另外一个类的过程。

2. 对象

对象的三个主要特性:
1. 行为(behavior):可以对对象施加哪些方法。
2. 状态(state):当施加那些方法时,对象如何响应。
3. 标识(identity):辨别具有相同行为与状态的不同对象。

3. 类之间的关系

类用矩形表示,类之间的关系用带有各种修饰的箭头表示。
表达类关系的UML符号:

这里写图片描述

1. 依赖(“uses-a”)

如果一个类的方法操作另一个类的对象,即一个类依赖于另一个类。
应该尽可能的将相互依赖的类减少至最少,用软件工程的术语来说,就是让类之间的耦合度最小。

2. 聚合(“aggregation”),has-a关系

聚合关系意味着类A的对象包含类B的对象。

3. 继承(“is-a”)

4. 对象与对象变量

这里写图片描述
一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。new操作符的返回值也是一个引用。
可以显式地将对象变量设置为null,表面这个对象变量目前没有引用任何对象。
局部变量不会自动地初始化为null,而必须通过调用new,或者将它们设置为null进行初始化。
所有的Java对象都存储在堆中。

5. 用户自定义类

  1. 要想创建一个完整的程序,应该将若干类组合在一起,其中只有一个类有main方法。
    源文件名必须与public类的名字相匹配。在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。

  2. 多个源文件的使用:
    许多程序员习惯于将每一个类存在一个单独的源文件中。

  3. 构造器总是伴随着new操作一起调用。
    所有的Java对象都是在堆中构造,构造器总是伴随着new操作符一起使用。C++程序员最易犯的错误是忘记new操作符。

  4. 不要在构造器中定义与实例域重名的局部变量。
    这里写图片描述

  5. 在Java程序设计语言中,所有的方法都必须在类的内部定义。

  6. 由于公有数据非常危险,所以应该将所有的数据域都设置为私有的。
    绝大多数方法都被设计为公有的,但某些情况下,也需要私有方法。

  7. final实例域:构建器构建对象时必须初始化这样的域。
    final修饰符大都应用于不可变类的域。

6. 静态域与静态方法

静态域(类域):static修饰的实例域,这个类的所有实例共享一个静态域,它属于类,而不属于任何独立的对象。

静态常量:static final修饰。静态变量使用得比较少,但静态常量却使用的比较多。

静态方法:一种不能向对象实施操作的方法,没有this参数的方法,静态方法可以访问自身类中的静态域。

属于类且不属于类对象的变量和函数。

静态方法有一种常见的用途:工厂方法。

7. main方法

不需要使用对象就能调用静态方法。
main方法也是一个静态方法,静态的main方法将执行并创建程序所需要的对象。

每一个类可以有一个main方法,这是一个常用于对类进行单元测试的技巧。

8. 方法参数

Java总是采用“按值调用”,即方法得到的是所有参数值得一个拷贝,不能修改传递给他的任何参数变量的内容。

方法参数共有两种类型:
- 基本数据类型(数字、布尔值)
- 对象引用

一个方法不可能修改一个基本数据类型的参数,但对象引用作为参数可以。
方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。因此,对对象参数的修改保留了下来。

总结:
- 一个方法不能修改一个基本数据类型的参数(即数值型和布尔型);
- 一个方法可以改变一个对象参数的状态;
- 一个方法不能让对象参数引用一个新的对象。

9. 对象构造

构造器:对定义的对象进行初始化。

  1. 默认域初始化:
    如果在构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值:数值为0,布尔值为false,对象引用为null。

  2. 无参数的构造器:

  3. 3.

10. 参数名常用技巧

它是基于:参数变量用同样的名字将实例域屏蔽起来。
将参数命名为salary,salary将引用这个参数,而不是实例域。但是可以采用this.salary的形式访问实例域。

11. 对象析构与finalize方法

Java有自动地垃圾回收器,不需要人工回收内存,所以Java不支持析构器。
但,某些对象使用了内存之外的其他资源时,当资源不再需要时,将其回收和再利用将显得十分重要。因此,可以为任何一个类添加finalize方法,finalize方法将在垃圾回收器清除对象之前调用。
在实际应用中,不要依赖于使用finalize方法回收任何短缺的资源,这是因为很难知道这个方法什么时候才能够调用。

如果某个资源您需要在使用完毕后立刻被关闭,那么需要由人工来管理。对象使用完时,可以应用一个close()方法来完成相应的清理操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值