Java面向对象编程基础:类与对象的理解
类与对象的概念
在面向对象编程中,类是一个抽象的模板,用于描述一类事物的共同属性和行为。对象则是类的具体实例,具有实际的状态和行为。
示例说明:
类定义:`Student` - 包含学号、姓名、年龄、专业等属性
具体对象:`student1` - "2024001", "李明", 20, "计算机科学"
具体对象:`student2` - "2024002", "王芳", 22, "软件工程"
Java中的对象特性
现实世界中的任何实体都可以表示为软件对象。软件对象包含两个核心要素:
- 状态(属性):对象持有的数据,通过成员变量表示
- 行为(方法):对象执行的操作,通过方法实现
例如,一辆汽车对象的状态包括颜色、品牌、速度等,行为包括启动、加速、刹车等。软件开发中,通过方法改变对象内部状态,并实现对象间的交互。
Java类的定义
类作为创建对象的蓝图或模板,定义了对象所具有的属性和方法。
类中变量的分类:
- 局部变量:在方法、构造器或代码块内部声明的变量。作用域仅限于所在方法,方法执行完毕后自动销毁。
- 成员变量:在类中方法外部声明的变量,也称为实例变量。创建对象时随对象一起实例化,可被类中的所有方法访问。
- 类变量:使用static关键字修饰的变量,属于类本身而非单个对象,所有实例共享该变量。
类中方法的类型:
一个类可以包含构造方法、私有方法、保护方法、公有方法、静态方法、final方法等多种类型。
对象的创建过程
对象通过类来实例化。在Java中,使用new关键字调用构造器来创建对象。完整的对象创建包含三个步骤:
- 声明:定义对象引用变量,指定其类型
- 实例化:使用new运算符创建对象实例
- 初始化:调用构造方法完成对象属性的初始化
示例代码:
public class Student {
// 构造器
public Student(String name) {
System.out.println("学生姓名:" + name);
}
public static void main(String[] args) {
Student stu = new Student("张三");
}
}
运行结果:学生姓名:张三
对象创建背后的执行流程:
- 加载类的字节码文件(.class)
- 在栈内存中为引用变量分配空间
- 在堆内存中为对象实例分配存储空间
- 对成员变量进行默认初始化(赋予默认值)
- 对成员变量进行显式初始化(赋予初始值)
- 执行构造方法完成对象的完整初始化
访问对象的成员
创建对象后,可以通过对象引用访问其成员变量和成员方法。
// 访问成员方法
objectReference.methodName();
// 访问成员变量
objectReference.variableName;
完整示例
以下示例展示如何定义类、创建对象并访问其成员:
public class Animal {
int age;
// 构造器
public Animal(String name) {
System.out.println("动物名称:" + name);
}
// 设置年龄
public void setAge(int age) {
this.age = age;
}
// 获取年龄
public int getAge() {
System.out.println("动物年龄:" + age);
return age;
}
public static void main(String[] args) {
// 创建Animal对象
Animal myAnimal = new Animal("小猫");
// 通过方法设置年龄
myAnimal.setAge(3);
// 调用方法获取年龄
myAnimal.getAge();
// 直接访问成员变量
System.out.println("年龄值:" + myAnimal.age);
}
}
编译运行结果:
动物名称:小猫
动物年龄:3
年龄值:3
源文件编写规范
当源文件中包含多个类、import语句和package语句时,需要遵守以下规则:
- 每个源文件最多包含一个public类
- 源文件中可以包含多个非public类
- 源文件名必须与public类的类名一致(例如:Employee.java)
- package语句必须位于源文件第一行
- import语句必须位于package语句之后、类定义之前
包与导入机制
包(Package):用于组织和管理类、接口,避免命名冲突。大型项目通常将功能相关的类放入同一个包中。
import语句:用于引入其他包中的类,使编译器能够定位到所需的类文件。
// 导入java.util包下所有类
import java.util.*;
// 导入java.util包下的ArrayList类
import java.util.ArrayList;
综合示例
以下示例包含两个类:Person和PersonDemo,演示了类的完整使用。
Person.java
public class Person {
String name;
int age;
String position;
double salary;
// 构造器
public Person(String name) {
this.name = name;
}
// 设置年龄
public void setAge(int age) {
this.age = age;
}
// 设置职位
public void setPosition(String position) {
this.position = position;
}
// 设置薪资
public void setSalary(double salary) {
this.salary = salary;
}
// 打印信息
public void displayInfo() {
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("职位:" + position);
System.out.println("薪资:" + salary);
}
}
PersonDemo.java
public class PersonDemo {
public static void main(String[] args) {
// 使用构造器创建两个Person对象
Person person1 = new Person("Alice");
Person person2 = new Person("Bob");
// 为第一个对象设置属性
person1.setAge(28);
person1.setPosition("技术主管");
person1.setSalary(15000);
person1.displayInfo();
// 为第二个对象设置属性
person2.setAge(24);
person2.setPosition("初级工程师");
person2.setSalary(8000);
person2.displayInfo();
}
}
编译运行:
javac PersonDemo.java
java PersonDemo
输出结果:
姓名:Alice
年龄:28
职位:技术主管
薪资:15000.0
姓名:Bob
年龄:24
职位:初级工程师
薪资:8000.0
总结
类是面向对象编程的核心概念,提供了对象的模板定义。对象是类的实例,具备独立的状态和行为。理解类与对象的关系,掌握对象的创建、初始化和访问机制,是Java编程的基础。