55. Java 类和对象 - 了解什么是对象
在 Java 编程中,对象是程序运行的核心。典型的 Java
程序会创建许多对象,这些对象通过调用方法相互交互。通过这些交互,程序可以完成各种任务,比如实现图形用户界面 (GUI
)、运行动画、或者通过网络发送和接收信息。
📦 创建对象示例
让我们来看一个名为 CreateObjectDemo
的小程序,它创建了三个对象:
- 一个
Point
对象 - 两个
Rectangle
对象
我们先看代码,然后逐步拆解:
java
public class CreateObjectDemo {
public static void main(String[] args) {
// 创建一个 Point 对象和两个 Rectangle 对象
Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);
// 输出 rectOne 的宽度、高度和面积
System.out.println("Width of rectOne: " + rectOne.width);
System.out.println("Height of rectOne: " + rectOne.height);
System.out.println("Area of rectOne: " + rectOne.getArea());
// 设置 rectTwo 的起点
rectTwo.origin = originOne;
// 输出 rectTwo 的起点坐标
System.out.println("X Position of rectTwo: " + rectTwo.origin.x);
System.out.println("Y Position of rectTwo: " + rectTwo.origin.y);
// 移动 rectTwo 并输出它的新坐标
rectTwo.move(40, 72);
System.out.println("X Position of rectTwo: " + rectTwo.origin.x);
System.out.println("Y Position of rectTwo: " + rectTwo.origin.y);
}
}
Point 类
java
public class Point {
public int x = 0;
public int y = 0;
// 构造器
public Point(int a, int b) {
x = a;
y = b;
}
}
Rectangle 类
java
public class Rectangle {
public int width = 0;
public int height = 0;
public Point origin;
// 四个构造器
public Rectangle() {
origin = new Point(0, 0);
}
public Rectangle(Point p) {
origin = p;
}
public Rectangle(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public Rectangle(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}
// 移动矩形
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}
// 计算矩形面积
public int getArea() {
return width * height;
}
}
🚀 程序执行过程解析
🌟 对象的创建
-
创建 Point 对象
javaPoint originOne = new Point(23, 94);
- 调用
Point
类的构造方法,创建一个坐标为 (23, 94
) 的点对象。
- 调用
-
创建 Rectangle 对象
rectOne
javaRectangle rectOne = new Rectangle(originOne, 100, 200);
- 使用
Rectangle
类的构造方法,创建一个以originOne
为起点、宽100
高200
的矩形对象。
- 使用
-
创建 Rectangle 对象
rectTwo
javaRectangle rectTwo = new Rectangle(50, 100);
- 这是使用宽高参数的构造方法,起点默认为 (
0, 0
)。
- 这是使用宽高参数的构造方法,起点默认为 (
🔄 对象的交互
-
更改
rectTwo
的起点为originOne
javarectTwo.origin = originOne;
两个矩形现在共享同一个起点对象 (
23, 94
)。 -
移动
rectTwo
到新位置 (40, 72
)javarectTwo.move(40, 72);
调用
move()
方法后,rectTwo
的起点被更新,但由于originOne
是共享的,rectOne
的起点也随之变化!
🏁 输出结果
yaml
Width of rectOne: 100
Height of rectOne: 200
Area of rectOne: 20000
X Position of rectTwo: 23
Y Position of rectTwo: 94
X Position of rectTwo: 40
Y Position of rectTwo: 72
🧹 对象的生命周期
- 创建阶段
- 通过
new
关键字调用构造方法,分配内存并初始化对象。
- 通过
- 使用阶段
- 通过方法调用、字段访问等与对象交互。
- 销毁阶段
- 当对象不再被引用时,Java 的垃圾回收器 (
GC
) 会自动回收内存。
- 当对象不再被引用时,Java 的垃圾回收器 (