Skip to content

04-面向对象基础(封装)

对应原始资料:day05-面向对象基础

一、面向对象思想

1. 什么是面向对象

  • 面向过程:强调步骤(第一步做什么、第二步做什么)。
  • 面向对象:强调找对象来做,把数据和操作数据的方法封装到对象中。

2. 三大特征

封装、继承、多态(基础阶段先掌握「封装」,继承和多态在进阶模块)。

二、类和对象

  • :对一类事物的抽象描述,是模板
  • 对象:类的一个具体实例,是真实存在的

1. 类的定义

java
public class Student {
    // 成员变量(属性)—— 堆内存,有默认值
    String name;
    int age;

    // 成员方法(行为)
    public void study() {
        System.out.println(name + " 正在学习");
    }
}

2. 对象的创建与使用

java
Student s = new Student();
s.name = "张三";
s.age  = 18;
s.study();

3. 成员变量 vs 局部变量

区别成员变量局部变量
位置类中方法外方法内 / 参数
内存
默认值无,必须先赋值
作用域整个类所属方法

三、封装

1. private 关键字

  • 被private 修饰的成员只能在本类中访问。
  • 通过 public 的 getter/setter 间接访问。
java
public class Student {
    private String name;
    private int age;

    public void setAge(int age) {
        if (age < 0 || age > 150) {
            System.out.println("年龄非法");
        } else {
            this.age = age;
        }
    }
    public int getAge() { return age; }
}

2. this 关键字

  • this 代表当前对象的引用
  • 当成员变量和局部变量重名时,用 this.成员变量 区分。
java
public Student(String name, int age) {
    this.name = name;   // this.name 是成员变量
    this.age  = age;
}

四、构造方法

1. 作用与格式

  • 作用:创建对象,并给成员变量赋初值。
  • 格式:方法名与类名相同,没有返回值类型(连 void 都没有),没有具体返回值。
java
public class Student {
    private String name;
    private int age;

    // 无参构造(不写时系统默认给一个;一旦自定义有参构造,无参构造就消失,建议永远手写)
    public Student() {}

    // 有参构造
    public Student(String name, int age) {
        this.name = name;
        this.age  = age;
    }
}

注意: 一旦手写了构造方法,系统就不再赠送无参构造。强烈建议始终手写无参构造

五、标准 JavaBean

java
public class Student {
    private String name;
    private int age;

    public Student() {}
    public Student(String name, int age) { this.name = name; this.age = age; }

    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; }
}

IDEA 快捷键:Alt + Insert → Getter/Setter/Constructor 一键生成。

六、API 文档与常见类

  • Object 类:所有类的根类,常用方法 toString()equals()(进阶模块详解)。
  • ScannerRandomString:见常用 API 章节。

七、对象的内存图(理解)

java
Student s = new Student("张三", 18);
  1. 栈中开辟 s 变量空间。
  2. 堆中开辟 Student 对象,初始化成员变量。
  3. 把堆中的地址赋给栈中的 s
  4. 字符串 "张三" 在堆中的字符串常量池中。

练习建议

  1. 定义 Phone 类(品牌、价格、打电话),创建对象测试。
  2. 定义 Student 类,包含 private 属性 + getter/setter + 构造方法。
  3. 写一个 StudentTest,创建 3 个学生存入数组,遍历输出。
  4. 练习 IDEA 的 getter/setter/constructor 自动生成。