Java基础重新学习记录(二):从类、对象到封装,我开始理解Java面向对象思想

前言

这是我重新学习 Java 后的第三篇学习记录。

上一篇主要记录了 Java 基础部分的学习过程,包括:

  • 变量
  • 条件判断
  • 循环
  • 数组
  • String
  • Scanner
  • 方法
  • 参数
  • 返回值

这一阶段最大的收获是:

我开始从“看懂代码”慢慢转变成“尝试自己写代码”。

但是继续学习之后,我发现:

前面的知识更多是在解决:

如何让程序完成某个功能。

例如:

计算两个数字的结果:

public static int multiply(int a,int b){

    return a*b;

}

它关注的是:

“这个功能应该怎么实现?”

但是当程序越来越复杂之后,就会出现新的问题:

如果我要表示一个学生、一件商品、一本书,应该如何组织这些数据?

如果所有东西都写在一个 main 方法里面,代码会越来越混乱。

所以这一阶段,我开始学习 Java 面向对象基础:

  • 类(class)
  • 对象(object)
  • 构造方法
  • this
  • private
  • getter/setter
  • 封装

同时继续保持之前的学习方式:

自己尝试 → 出现问题 → 分析原因 → 修改代码 → 重新理解。


一、从方法到类:开始思考代码结构

学习方法的时候,我更多关注:

“一个功能应该怎么写?”

例如:

public static int multiply(int a,int b){

    return a*b;

}

这个方法可以完成两个数字相乘。

但是如果现在需要表示一个学生:

例如:

  • 姓名
  • 年龄
  • 成绩

如果直接写:

String name = "小明";

int age = 20;

double score = 90;

当学生数量增加的时候,就会变得越来越混乱。

例如:

String name1;
int age1;

String name2;
int age2;

String name3;
int age3;

这种方式很明显不方便。

所以我开始理解:

类的作用,就是把一类事物的数据和行为组织到一起。

例如:

学生可以抽象成:

Student

这个类。


二、第一次创建自己的类:Student

学习类的时候,我首先练习了 Student。

例如:

public class Student {

    String name;

    int age;

}

这里:

Student

就是一个类。

它描述了学生应该具有哪些属性。

例如:

Student

属性:

- name
- age

但是这个时候的 Student 只是一个模板。

它还不是现实中的某一个学生。

如果想真正拥有一个学生,需要创建对象。


三、类和对象:理解 new 到底做了什么

之后开始学习对象。

例如:

Student student1 = new Student();

Student student2 = new Student();

刚开始看到这段代码的时候,我知道:

new 是创建对象。

但是之前并没有真正理解为什么需要对象。

后来通过练习,我慢慢理解:

类更像是一张设计图。

例如:

Student类

规定:

学生应该有什么属性

而:

student1

student2

才是真正创建出来的学生对象。

虽然它们都是 Student 类型,但是保存的数据可以不同。

例如:

student1.name = "小明";

student2.name = "小红";

两个对象都是学生,但是它们的数据不同。

所以:

类是模板,对象是根据模板创建出来的具体实例。

这是我对面向对象理解的第一个重要变化。


四、构造方法:让对象创建时拥有数据

继续学习对象的时候,我发现:

如果每次创建对象之后,都需要:

student.name = "小明";

student.age = 20;

会比较麻烦。

所以开始学习构造方法。

例如:

public class Student {

    String name;

    int age;


    public Student(String name,int age){

        this.name = name;

        this.age = age;

    }

}

创建对象:

Student student = new Student("小明",20);

这样对象创建的时候,就可以直接完成初始化。

相比之前:

new Student();

student.name = "小明";

student.age = 20;

更加方便。

这让我开始理解:

构造方法的作用,就是在创建对象的时候完成初始化。


五、this:第一次真正理解它的作用

在学习构造方法的时候,this 是让我比较困惑的一个知识点。

例如:

public Student(String name,int age){

    this.name = name;

    this.age = age;

}

刚开始我会疑惑:

为什么不能直接写:

name = name;

后来理解:

这里其实存在两个同名变量。

一个是成员变量:

this.name

代表当前对象自己的属性。

另一个是参数:

name

代表传入构造方法的数据。

所以:

this.name = name;

表示:

当前对象的 name 属性,等于传入进来的 name 参数。

this 的作用,就是帮助 Java 区分:

对象自己的属性。

和:

方法里面传入的参数。


六、封装:为什么需要 private?

继续学习面向对象时,我开始接触封装。

刚开始我的理解比较简单:

把变量改成 private,然后生成 getter/setter。

但是后面练习之后,我发现:

封装真正解决的问题不是代码格式。

而是:

限制外部随意修改对象内部的数据。

例如:

如果属性直接公开:

student.age = -100;

这种明显不合理的数据也可以被修改。

所以:

private int age;

表示:

这个属性不能被外部直接访问。

需要通过方法控制访问。


七、Book 练习:第一次使用 getter/setter

之后进行了 Book 类练习。

例如:

public class Book {

    private String title;

    private double price;

}

因为属性变成了 private:

private String title;

外部不能直接:

book.title;

所以需要提供:

getter:

public String getTitle(){

    return title;

}

setter:

public void setTitle(String title){

    this.title = title;

}

价格也是同样的方式。

刚开始学习 getter/setter 时,我觉得:

为什么不能直接修改?

例如:

book.price = 50;

为什么还需要:

book.setPrice(50);

后来理解:

因为方法可以增加控制。

例如:

如果以后要求价格不能小于 0:

public void setPrice(double price){

    if(price >= 0){

        this.price = price;

    }

}

这样就可以避免错误数据进入对象。

这也是封装真正的意义。


八、Product 练习:继续理解对象设计

之后又练习了 Product 类。

例如:

public class Product {

    private String name;

    private double price;

    private int stock;

}

分别表示:

  • 商品名称
  • 商品价格
  • 商品库存

然后为它们添加:

getName()

setName()

getPrice()

setPrice()

getStock()

setStock()

通过这个练习,我开始更加熟悉:

一个类通常包含:

类

├── 属性

└── 方法

属性表示:

对象有什么。

方法表示:

对象可以做什么。


九、这一阶段最大的变化:从写功能到设计结构

学习 Java 基础的时候,我更多考虑:

“我要输出什么?”

“我要计算什么?”

但是学习面向对象之后,我开始思考:

如果以后开发真实项目:

用户信息应该如何表示?

商品信息应该如何保存?

不同的数据之间有什么关系?

这也是为什么后端开发中大量使用面向对象思想。

因为真实项目不是几个变量和几个方法组成的。

而是很多对象之间相互协作。


十、目前对 class、object、new 的理解

经过这一阶段练习,我现在对几个概念的理解:

class

类,是一种模板。

例如:

Student

描述学生应该有什么。


object

对象,是根据类创建出来的具体实例。

例如:

Student student = new Student();

创建了一个学生对象。


new

new 用来创建对象。

例如:

new Student();

表示创建一个新的 Student 对象。


十一、重新学习 Java 后的变化

重新学习 Java 的过程中,我越来越发现:

真正困难的不是记住某个语法。

而是理解:

为什么需要它,以及它解决了什么问题。

以前看到:

Student student = new Student();

可能只是知道:

“这是创建对象。”

但是现在开始理解:

它代表:

  1. 根据 Student 类创建对象
  2. 调用构造方法初始化数据
  3. 将创建出来的对象交给 student 保存

虽然现在还没有深入学习 JVM 原理,但是已经开始建立面向对象思维。


十二、目前 Java 学习进度

目前已经重新学习并练习:

  • Java 基础语法
  • 变量
  • 条件判断
  • 循环
  • 数组
  • String
  • Scanner
  • 方法
  • 参数
  • 返回值
  • boolean
  • 对象
  • 构造方法
  • this
  • private
  • getter/setter
  • 封装

接下来还需要继续补充:

  • 继承
  • super
  • 方法重写
  • 多态
  • ArrayList
  • HashMap
  • 异常处理

然后进行一次 Java 综合练习,把之前学习的内容真正串起来。


总结

重新学习 Java 到现在,我最大的变化是:

从以前:

“这个代码为什么这样写?”

慢慢变成:

“这个对象应该保存什么数据?应该提供什么方法?”

这也是面向对象思想带给我的最大改变。

后续我会继续完成 Java 基础补充,并通过综合练习检验自己是否真正掌握。


代码仓库

本文学习过程中的相关代码已经同步上传到 GitHub:

GitHub:

https://github.com/jiayi-dev/java-learning

欢迎交流学习,也欢迎参考代码。

本文使用 AI 工具辅助整理文章结构,内容基于本人实际学习过程、代码实践以及学习记录整理。

posted @ 2026-09-04 20:00  jiang-jiayi  阅读(2)  评论(0)    收藏  举报