类(class)是构造对象的模板或蓝图。由类构造(construst)对象的过程称为创建类的实例(instance)。
封装(encapsulation)是与对象有关的一个重要概念。对象中的数据称为实例域(instance fields),操纵数据的工程称为方法(method)对于每个特定的类实例(对象)都有一组特定的实例域值。这些值得集合就是这个对象的当前状态(state)。
实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实例域。
类可以通过扩展另一个类来建立(继承)。
对象的三个主要特性:
对象的行为(behavior)---可以对对象施加哪些操作,或者可以对对象施加哪些方法
对象的状态(state)--当施加那些方法时,对象如何响应
对象标识(identity)--如何辨别具有相同行为与状态的不同对象
首先从设计类开始,然后再往每个类中添加方法。
在类之间,最常见的关系有
依赖(use-a)
聚合(has-a)
继承(is-a)
要想使用对象,就必须首先构造对象,并指定其初始状态。然后,对对象施加方法。
在Java程序设计中,使用构造器(constructor)构造新实例。
构造器的名字应该与类名相同。
在一个文件中,只能有一个公有类,但是可以有任意数目的非公有类
构造器:
构造器与类同名
每个类可以有一个以上构造器
构造器可以有0个、1个或者1个以上的参数
构造器没有返回值
构造器总是伴随着new操作一起调用
在所有方法中不要命名与实例域同名的变量
方法用于操作对象以及存取他们的实例域。
public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; }将调用这个方法的对象的salary实例域设置为新值
unmer007.raiseSalary(5);
double raise = number007.salary * 5 / 100; number007.salary += raise; raiseSalary方法有两个参数。第一个参数被称为隐式(implicit)参数,是出现在方法名前的Employee类对象。第二个参数位于方法名后面的括号中的数值,这是一个显示(explicit)参数。 在每一个方法中,关键字this表示隐式参数 public void raiseSalary(double byPercent) { double raise = this.salary * byPercent / 100; this.salary += raise; }
这样可以将实例域与局部变量明显地区分开来。
在Java中,为了实现一个私有的方法,只需要将关键字public改为private即可。私有方法不会被外部的其他类操作调用。
实例域定义为final。构建对象时必须初始化这样的域。也就是说,必须确保在每一个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够再对它进行修改
final修饰符大都应用于基本数据(primitive)类型域,或不可变(immutable)类的域
如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。
public class Math{ ... public static final double PI = 3.1415926565; ... } 在程序中,可以采用Math.PI的形式获取这个常量。
静态方法是一种不能向对象实施操作的方法。
如果多个方法有相同的名字、不用的参数、便产生了重载(overloading)。Java允许重载任何方法,而不只是构造方法。
一个类可以使用所属包中的所有类,以及其它包中的共有类。
import语句是一种引用包含在包中的类的简明描述。
package com.iixhs.java
public class Iixhs
{
...
}
标记为public的部分可以被任意的类使用;标记为private的部分只能被定义他们的类使用。如果没有指定public或private,这个部分(类、方法或变量)可以被同一个包中的所有方法访问。
(1)一定将数据设计为私有;
(2)一定要对数据初始化;
(3)不要在类中使用过多的基本数据类型
(4)不是所有的域都需要独立的域访问器和域更改器;
(5)使用标准格式进行类的定义。
一定采用下面的顺序书写类的类容:
公有访问特性部分
包作用域访问特性部分
私有访问特性部分
在每一部分中,应该按照下列顺序列出:
实例方法
静态方法
实例域
静态域
(6)将职责过多的类进行分解
(7)类名和方法名要能够体现他们的职责。