类是构造对象的模板或蓝图,由类构造对象的过程称为创建类的实例。
对象由三个主要特征:
1.对象的行为
2.对象的状态
3.对象的标识
同一个类的所有对象实例,由于支持相同的行为而具有家族式的相似性,对象的行为是用可调用的方法来定义的。每个对象都保存着描述当前状况的信息,这就是对象的状态。对象的状态可能会随着时间而发生改变,但这种改变不会是自发的。对象状态的改变必须通过调用方法实现。
但是对象的状态并不能完全描述一个对象。每个对象都由一个唯一的标识。作为同一个类的实例,每个对象的标识总是不同的,状态也往往存在差异。
类之间由三种常见的关系:
依赖 聚合 继承
依赖即“user-a”关系,是一种最明显的 最常见的关系,如果一个类的方法使用或操纵另一个类的对象,我们就说一个类依赖于另一个类。
聚合即“has-a”关系,例如一个Order对象包含一些Item对象。包容关系意味着类A的对象包含类B的对象。
继承即“is-a”关系,表示一个更特殊的类与一个更一般的类之间的关系。
例如创建一个简单的类来理解下 Java 中类的定义:
public class Dog { String breed;
int size;
String colour;
int age;
void eat() {
} void run() {
} void sleep(){
} void name(){
}
}
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。
一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法。
构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Puppy{ public Puppy(){
} public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字 new 来创建一个对象。
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
下面是一个创建对象的例子:
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String[] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
}
Java 包
包主要用来对类和接口进行分类。当开发 Java 程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。
import 语句
在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。
例如,下面的命令行将会命令编译器载入 java_installation/java/io 路径下的所有类
import java.io.*;
用户自定义类:
用户除了可以使用Java的内置函数之外,还可以自己定义函数。自定义函数有3种方法。
使用关键字 function 构造
语法:
function funcName([param1][,param2...}){
statements;
}
使用 function 构造
语法:
var result = new function (['param1'][,'param2']...,'statements');
例如;
var result = new function ('x','y','return x+y');
使用函数直接量构造
语法:
var result = function ([param1][,param2,...]){
statements
};
这里也可以为函数指定一个名称,以便于递归程序的调用。例如:
var result = function([param1][,param2,...]){
statements
};
注意;
1.各个函数名不可以重复,并且区分大小写
2.函数名的命名规则和变量的命名规则相同
3.参数可以使用变量、常量或者表达式
4.如果函数有多个参数,多个参数之间使用逗号隔开
5.如果函数有返回值,使用return语句返回,如果没有return语句,函数将返回一个undefined值
6.自定义函数不会自动执行,必须调用才会执行
类的设计技巧:
1.一定要保证数据私有
这是最重要的,一定不要破坏封装性。
2.一定要对数据进行初始化
因为Java并不会为你初始化局部变量,但是会对对象的实例字段进行初始化。
3.不要在类中使用过多的基本类型
这个想法是要用其他的类替换使用多个相关的基本类型,这样会使类更易于理解,也易于修改。
4.不是所有的字段都需要单独的字段访问器和字段更改器、
5.分解有过多指责的类
简而言之,如果明显地可以将一个复杂的类分解成两个更为简单的类,就应该将其分解。
6.类名和方法要能体现它们的职责
类名与变量都应该有一个能够反映其含义的名字。
7.优先使用不可变的类