第二章 面向对象程序设计
第一节 类与对象
概述
本节内容围绕Java语言中的核心概念——类与对象展开,详细讲解面向对象程序设计的基础。学习本节,考生将掌握类与对象的定义、声明与使用方法,理解类的成员变量与方法的作用,理解如何通过对象来操作数据和实现功能。掌握这些内容是理解面向对象编程思想的关键,也是后续学习继承、多态等高级特性的基础。
学习目标:
- 理解类和对象的概念及其在Java中的表现
- 掌握类的成员变量和成员方法的定义及使用
- 能够编写简单的类和创建对象,调用对象的方法
- 理解构造方法的作用和使用
- 理解封装的基本思想及其实现
核心概念
类(Class)
类是具有相同属性和行为的对象的抽象描述,是面向对象程序设计的基本单位。类定义了对象的状态(属性)和行为(方法)。
对象(Object)
对象是类的具体实例,是类在内存中的实体。通过对象可以访问类中定义的属性和方法。每个对象拥有独立的属性值。
成员变量(属性)
成员变量又称为字段,用于保存对象的状态信息。它们定义在类中,但不属于任何方法。
成员方法(行为)
成员方法定义了类的行为,描述对象可以执行的操作。方法通过访问成员变量来实现功能。
构造方法(Constructor)
构造方法是一种特殊的方法,用于创建对象时初始化对象的状态。构造方法名与类名相同,无返回值。
封装(Encapsulation)
封装是面向对象的基本特性之一,通过访问权限修饰符(如private、public)隐藏对象的内部实现,只暴露必要的接口,提高程序的安全性和维护性。
原理分析
在Java中,类是构建应用程序的蓝图。它定义了属性和行为,但本身不占用内存。只有创建对象(实例)时,才会在内存堆中分配空间,存储对象的成员变量数据。
对象通过引用变量操作,引用变量存储对象的地址。方法调用通过对象引用实现,访问对应对象的成员。
构造方法在对象创建时自动调用,完成初始化工作。若未定义构造方法,Java编译器会提供一个默认无参构造方法。
封装通过控制成员变量和方法的访问权限,保护对象内部数据不被随意修改。通常成员变量设置为private,通过public的getter和setter方法实现访问控制。
这种设计思想符合现实世界的抽象模型,提高代码的复用性、可维护性和扩展性。
详细内容
1. 类的定义
类的定义格式如下:
[修饰符] class 类名 {
// 成员变量
// 构造方法
// 成员方法
}
- 类名遵循标识符命名规则,首字母一般大写
- 修饰符常见的有public,表示类的访问范围
示例:
public class Person {
String name;
int age;
}
这里定义了一个Person类,包含姓名和年龄两个成员变量。
2. 对象的创建和使用
使用new关键字创建对象,语法如下:
类名 对象名 = new 类名();
示例:
Person p = new Person();
p.name = "张三";
p.age = 20;
通过对象p访问成员变量,给属性赋值。
3. 成员方法的定义和调用
成员方法定义类的行为,例如给Person类添加一个自我介绍的方法:
public void introduce() {
System.out.println("我叫" + name + ", 年龄" + age);
}
调用方法:
p.introduce();
方法可以访问同一类的成员变量,实现功能操作。
4. 构造方法
构造方法用于初始化对象,定义格式类似普通方法,但无返回值且方法名与类名相同。
示例:
public Person(String name, int age) {
this.name = name;
this.age = age;
}
创建对象时调用该构造方法:
Person p = new Person("李四", 25);
构造方法可以重载,支持多种初始化方式。
5. 封装与访问修饰符
封装体现在对成员变量使用private修饰,禁止外部直接访问,提供getter和setter方法控制访问:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age > 0) {
this.age = age;
}
}
}
这样可以保证数据的有效性和安全性。
实例分析
实例一:学生类的定义与使用
背景:设计一个Student类,包含姓名、学号、成绩属性,能输出学生信息。
代码:
public class Student {
private String name;
private String studentId;
private double score;
public Student(String name, String studentId, double score) {
this.name = name;
this.studentId = studentId;
this.score = score;
}
public void showInfo() {
System.out.println("学生姓名: " + name);
System.out.println("学号: " + studentId);
System.out.println("成绩: " + score);
}
// getter和setter省略
}
// 测试
public class TestStudent {
public static void main(String[] args) {
Student s = new Student("王五", "20230101", 89.5);
s.showInfo();
}
}
分析:通过构造方法初始化对象,封装成员变量,提供显示信息的方法。演示了类与对象的基本用法。
结论:掌握类的定义、对象创建、成员方法调用的完整流程。
实例二:计算器类实现简单运算
背景:设计一个Calculator类,提供加法和乘法功能。
代码:
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int multiply(int a, int b) {
return a * b;
}
}
// 测试
public class TestCalculator {
public static void main(String[] args) {
Calculator calc = new Calculator();
int sum = calc.add(5, 3);
int product = calc.multiply(5, 3);
System.out.println("加法结果: " + sum);
System.out.println("乘法结果: " + product);
}
}
分析:成员方法实现功能,体现类的行为描述。对象调用方法完成操作。
结论:理解成员方法的定义和调用方法。
实例三:封装的应用—银行账户类
背景:设计BankAccount类,封装账户余额,提供存款和取款功能。
代码:
public class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
if (initialBalance >= 0) {
this.balance = initialBalance;
} else {
this.balance = 0;
}
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
public double getBalance() {
return balance;
}
}
// 测试
public class TestBankAccount {
public static void main(String[] args) {
BankAccount account = new BankAccount(1000);
account.deposit(500);
account.withdraw(200);
System.out.println("账户余额: " + account.getBalance());
}
}
分析:通过private修饰balance变量,限制外部直接访问;通过方法控制余额变动,保证数据有效。
结论:封装提高了类的安全性和健壮性。
常见误区
混淆类和对象的概念
- 错误:认为类就是对象。
- 正确:类是抽象模板,对象是类的实例。
未定义构造方法时,误认为不能创建对象
- 错误:未写构造方法,编译报错。
- 正确:Java自动提供默认无参构造方法。
成员变量未封装,直接用public修饰
- 错误:成员变量用public,导致外部任意修改。
- 正确:用private修饰,提供getter/setter方法。
构造方法写成void返回类型
- 错误:构造方法写成public void ClassName()。
- 正确:构造方法无返回值声明。
对象未初始化即调用成员方法或变量
- 错误:对象引用为null时调用方法,导致空指针异常。
- 正确:先用new创建对象,再调用。
应用场景
软件系统中实体的建模
- 如学生管理系统中的学生类,商品管理系统中的商品类等。
封装数据和行为,提供模块化设计
- 利用类封装属性和方法,实现代码的复用和维护。
构造方法实现对象初始化
- 保证对象创建时状态完整正确,方便使用。
封装提高程序安全性
- 控制对数据的访问和修改,防止非法操作。
实现功能模块的独立调用
- 如工具类、业务处理类通过对象调用,实现功能分离。
知识拓展
静态成员(static)
静态变量和方法属于类本身,而不是某个对象,多个对象共享。this关键字
表示当前对象,用于区分成员变量和参数。重载(Overloading)
同一类中多个方法名相同但参数不同,构造方法也支持重载。包(Package)和访问权限
类的访问权限影响跨包访问,需要了解public、protected、default、private的不同。对象的内存结构
理解对象在堆内存中的布局,有助于性能优化。
总结回顾
本节重点围绕Java面向对象的基础——类与对象展开:
- 类是对象的抽象,定义了属性和行为
- 对象是类的实例,代表具体的实体,拥有独立的属性值
- 成员变量保存对象状态,成员方法实现对象行为
- 构造方法用于对象初始化,支持重载
- 封装通过访问修饰符实现,保护数据安全
- 类与对象的使用是面向对象编程的基础,理解并掌握这些知识点,是学习Java编程和通过全国计算机等级考试二级Java科目的关键
通过大量示例和案例,考生应能熟练编写类、创建对象,理解并运用封装,避免常见误区,为后续学习继承、多态等内容打下坚实基础。
祝各位考生学习顺利,掌握Java面向对象编程的核心技能!