Java类与对象 #
一、面向对象概述 #
1.1 什么是面向对象 #
面向对象编程(OOP)是一种编程范式,它使用"对象"来设计程序。对象包含数据(属性)和代码(方法)。
1.2 面向对象三大特性 #
- 封装:隐藏内部实现细节
- 继承:复用和扩展已有类
- 多态:同一接口不同实现
二、类的定义 #
2.1 类的基本结构 #
java
public class Person {
// 成员变量(属性)
private String name;
private int age;
// 构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 成员方法
public void sayHello() {
System.out.println("你好,我是" + name);
}
// getter和setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.2 类的组成 #
java
public class ClassName {
// 1. 成员变量(字段)
private String field1;
public int field2;
// 2. 静态变量(类变量)
private static int count;
// 3. 构造方法
public ClassName() {
}
// 4. 成员方法
public void method1() {
}
// 5. 静态方法
public static void method2() {
}
// 6. 代码块
{
// 实例代码块
}
// 7. 静态代码块
static {
// 静态代码块
}
}
三、对象的创建 #
3.1 使用new关键字 #
java
// 创建对象
Person person = new Person("张三", 25);
// 调用方法
person.sayHello();
// 访问属性(通过getter)
String name = person.getName();
3.2 对象内存分析 #
java
Person p1 = new Person("张三", 25);
Person p2 = new Person("李四", 30);
// 栈内存:存储p1、p2引用变量
// 堆内存:存储两个Person对象
// p1和p2指向不同的对象
3.3 对象比较 #
java
Person p1 = new Person("张三", 25);
Person p2 = new Person("张三", 25);
// == 比较引用地址
System.out.println(p1 == p2); // false
// equals比较内容(需要重写)
System.out.println(p1.equals(p2)); // 取决于equals实现
四、成员变量 #
4.1 实例变量 #
java
public class Student {
// 实例变量:属于对象
private String name;
private int age;
// 每个对象有独立的实例变量
}
4.2 静态变量 #
java
public class Student {
// 静态变量:属于类,所有对象共享
private static int totalCount = 0;
public Student() {
totalCount++;
}
public static int getTotalCount() {
return totalCount;
}
}
4.3 变量初始化 #
java
public class Demo {
// 实例变量有默认值
private int num; // 0
private double price; // 0.0
private boolean flag; // false
private String name; // null
// 显式初始化
private int count = 10;
// 静态变量
private static int total = 0;
}
五、成员方法 #
5.1 实例方法 #
java
public class Calculator {
// 实例方法:需要通过对象调用
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
// 调用
Calculator calc = new Calculator();
int result = calc.add(10, 20);
5.2 静态方法 #
java
public class MathUtils {
// 静态方法:通过类名调用
public static int max(int a, int b) {
return a > b ? a : b;
}
public static int min(int a, int b) {
return a < b ? a : b;
}
}
// 调用
int max = MathUtils.max(10, 20);
5.3 方法参数 #
java
public class Demo {
// 基本类型参数:值传递
public void changeValue(int num) {
num = 100; // 不影响原变量
}
// 引用类型参数:引用传递
public void changeArray(int[] arr) {
arr[0] = 100; // 会修改原数组
}
// 可变参数
public int sum(int... nums) {
int total = 0;
for (int num : nums) {
total += num;
}
return total;
}
}
5.4 方法重载 #
java
public class Calculator {
// 方法重载:方法名相同,参数列表不同
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
public int add(int a, int b, int c) {
return a + b + c;
}
}
六、this关键字 #
6.1 引用当前对象 #
java
public class Person {
private String name;
public Person(String name) {
// this区分成员变量和参数
this.name = name;
}
public void introduce() {
System.out.println("我是" + this.name);
}
}
6.2 调用其他构造方法 #
java
public class Person {
private String name;
private int age;
public Person(String name) {
this(name, 0); // 调用另一个构造方法
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
6.3 调用当前对象的方法 #
java
public class Demo {
public void method1() {
System.out.println("method1");
}
public void method2() {
this.method1(); // 调用当前对象的方法
System.out.println("method2");
}
}
七、访问控制 #
7.1 访问修饰符 #
| 修饰符 | 同一类 | 同一包 | 子类 | 其他 |
|---|---|---|---|---|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| 默认 | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |
7.2 使用示例 #
java
public class Person {
// private:只能在本类访问
private String name;
// protected:子类和同包可访问
protected int age;
// 默认:同包可访问
String address;
// public:任何地方可访问
public String phone;
// 通过getter/setter访问私有属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
八、代码块 #
8.1 实例代码块 #
java
public class Demo {
private int num;
// 实例代码块:每次创建对象时执行
{
num = 10;
System.out.println("实例代码块执行");
}
public Demo() {
System.out.println("构造方法执行");
}
}
8.2 静态代码块 #
java
public class Demo {
private static int count;
// 静态代码块:类加载时执行一次
static {
count = 0;
System.out.println("静态代码块执行");
}
}
8.3 执行顺序 #
java
public class Demo {
static {
System.out.println("1. 静态代码块");
}
{
System.out.println("2. 实例代码块");
}
public Demo() {
System.out.println("3. 构造方法");
}
public static void main(String[] args) {
new Demo();
// 输出:
// 1. 静态代码块
// 2. 实例代码块
// 3. 构造方法
}
}
九、总结 #
| 概念 | 说明 |
|---|---|
| 类 | 对象的模板,定义属性和方法 |
| 对象 | 类的实例,通过new创建 |
| 成员变量 | 对象的属性 |
| 成员方法 | 对象的行为 |
| 构造方法 | 创建对象时初始化 |
| this | 引用当前对象 |
类与对象要点:
- 类是模板,对象是实例
- 成员变量属于对象,静态变量属于类
- 使用访问修饰符控制访问权限
- this关键字引用当前对象
最后更新:2026-03-26