1. 概念
类:由数据成员与函数成员封装而成。
- 在Java语言中数据成员称为域变量、属性、成员变量等;(静态特征)
- 函数成员称为成员方法,简称为方法。(动态特征)
//举例:定义圆柱体类。
class Cyli { //定义圆柱体类Cyli
double rad; //声明成员变量rad
int height; //声明成员变量height
double pi=3.14; //声明数据成员pi并赋初值
void area( ) { //定义成员方法area(),计算底面积
System.out.println("底面积="+ pi*rad* rad);
}
void volume( ) { //定义成员方法volume (),计算体积
System.out.println("体积="+((pi*rad* rad)*height));
}
}
对象:由一组属性和一组行为构成的。对象的类型称为类。
- 对象之间靠互相传递消息而相互联系,调用某个对象的方法就是向该对象传送一个消息,要求该对象实现某一行为(功能)。
- 一个对象的生命周期:创建 → 使用 → 销毁。
- 例:对于学籍管理系统,学生是一个类,而一个具体的学生则是学生类的一个实例;在立体几何中,圆柱体是一个类,而一个具体大小的圆柱体则是圆柱体类的一个实例。
关系:
- 可以将对象理解为一种新型的变量。
- 类是一种数据类型,对象就是该类型的一个变量,变量名是某个具体对象的标识。
- 类与对象的关系相当于普通数据类型与其变量的关系。
2. 对象的创建
// 如:创建圆柱体类Cyli的一个对象(实例)
Cyli volu; //声明指向对象的变量volu,初值为null
volu = new Cyli(); //用new创建新对象,并让volu指向它
// 或
Cyli volu = new Cyli(); //声明并创建新的对象,并让volu指向该对象
步骤:
1、声明指向对象的“类”类型的变量:
- volu视为“对象的名称”,是引用类型变量,非对象本身,存放在栈内存中。
2、创建新的对象,并让volu指向该对象:
- 用new创建新的对象,对象存放在堆内存中。
注意:
1、当一个对象被创建时,会对其中各种类型的成员变量按下表自动进行初始化。除基本类型之外的变量都是引用类型。
变量类型 | 初始值 | 变量类型 | 初始值 |
byte | 0 | double | 0.0D |
short | 0 | char | ‘\u000’(表示为空) |
int | 0 | boolean | false |
long | 0L | String | null |
float | 0.0F | 所有引用类型 | null |
2、若要自己初始化对象成员的值,则可以使用构造函数进行初始化。例如:
// 例:利用构造方法来初始化圆柱体类Cyli的成员变量。
class Cyli {
private double rad;
private int height;
private double pi = 3.14;
Cyli(double r, int h) { //定义构造方法
rad=r; height=h;
}
double area() {
return pi*rad*rad;
}
double volume() {
return area()*height;
}
}
public class Demo {
public static void main(String[ ] args) {
Cyli volu = new Cyli(3.5, 8); //创建对象并调用构造方法
System.out.println("圆柱底面积="+volu.area());
System.out.println("圆柱体体积="+volu.volume());
}
}
//输出
>>>圆柱底面积=38.465
>>>圆柱体体积=307.72
3、同一类的不同对象分配在不同的堆内存中。例如:
// 例:以圆柱体类Cyli的对象为参数进行方法调用,并分析程序中对象的比较。
class Cyli {
private static double pi = 3.14;
private double rad;
private int height;
public Cyli(double r, int h) {
rad=r; height=h;
}
public void compare(Cyli volu) {
if(this==volu)
System.out.println("2个对象指向同一对象");
else
System.out.println("2个对象指向不同对象");
}
}
public class Demo2 {
public static void main(String[ ] args) {
Cyli volu1 = new Cyli(1.0, 2);
Cyli volu2 = new Cyli(1.0, 2);
Cyli volu3 = volu1;
volu1.compare(volu2); //比较volu1与volu2是否相等
volu1.compare(volu3); //比较volu1与volu3是否相等
}
}
//输出
>>>2个对象指向不同对象
>>>2个对象指向同一对象
如图,每次用new新建一个对象时,会单独分配一块空间给该对象,因此volu1和volu2指向不同内存空间,即指向不同对象;
而volu3 = volu1说明两个变量的值相等,由于两个都是引用型变量,所以volu1和volu3指向同一块内存空间,即指向同一个对象。
3. 对象的使用
创建对象后,可访问对象的成员,形式如下:
对象名.对象成员
如: volu.rad = 2.8;
volu.area( );
volu.inpu(2.5, 3, 3.14);