Java类与对象基础入门:从面向对象思维到代码实现

Mia
Mia
发布时间:2026-10-16 | 3人浏览过
原创

本文将深入解析Java面向对象编程的核心机制,通过五子棋案例直观对比面向过程与面向对象的区别,详细讲解如何定义类、使用new关键字实例化对象,并深入剖析this关键字在区分成员变量与方法参数中的应用,帮助开发者掌握构建可维护软件的基础能力。

什么是面向对象

Java是纯面向对象的语言,其核心思想被称为OOP(Object Oriented Programming)。面向对象不仅体现在Java中,也广泛存在于C++、PHP等语言。OOP的三个基本特征是封装、继承和多态。

面向过程与面向对象的区别

理解面向对象的前提是明确它与面向过程的差异。面向过程侧重于程序的执行步骤,通常通过一系列函数按顺序实现;而面向对象侧重于识别系统中的“对象”,并通过对象间的协作完成任务。

以开发一个五子棋游戏为例:

  • 面向过程思路:需要线性地规划每一步操作。例如:先实现开始逻辑,搭建棋盘框架,然后循环处理玩家下棋并打印新棋盘、电脑下棋并打印新棋盘,最后判断胜负并输出结果。这种方式的缺点是步骤间耦合度高,修改规则(如改成围棋)往往需要重构大量代码。
  • 面向对象思路:寻找系统中的独立实体。主要包括三类对象:
    1. 玩家对象:负责接收输入。
    2. 棋盘对象:负责状态更新与界面显示。
    3. 规则系统对象:负责判定输赢。

面向对象的优势在于模块间的独立性较强。当需求变更时,通常只需针对特定对象进行调整,从而提升了代码的维护性、复用性和扩展能力。

类与对象的使用

在Java中,class是定义类的关键字,它将现实世界的事物抽象为代码结构。类相当于一张设计图纸,定义了事物应具备的属性(成员变量)和行为(成员方法)。对象则是根据图纸制造出的实物。

类的定义语法

标准的类定义格式如下:

[修饰符] class 类名 [extends 父类名] [implements 接口名] {
    // 类体:成员变量和方法
}

规范说明:
- 类名应采用大驼峰命名法。
- extends和implements为可选部分。
- 成员变量定义在类中、方法之外。

类的实例化:从图纸到实体

类本身不占用存储数据的物理空间,只有实例化为对象后,才会分配内存。创建对象必须使用new关键字:

// 定义Person类
class Person {
    public String name;
    public int age;
    
    public void eat() {
        System.out.println("吃饭");
    }
    
    public void sleep() {
        System.out.println("睡觉");
    }
}

// 实例化对象
Person per = new Person();

上述代码中,Person是一种自定义类型,per是引用变量。它不直接存储对象内容,而是存储指向堆内存中该对象的地址。

// 完整的调用示例
public class Demo {
    public static void main(String[] args) {
        // 1. 实例化对象,分配物理空间
        Person per1 = new Person();
        
        // 2. 初始化属性(若不赋值则取默认零值)
        per1.age = 20;
        per1.name = "张三";
        
        // 3. 调用对象行为
        per1.eat();
        per1.sleep();
        
        // 4. 生成第二个对象
        Person per2 = new Person();
        per2.age = 30;
        per2.name = "李四";
    }
}

关键结论:
- 类是静态模板,对象是动态实例。
- 只有使用new时,JVM才会分配内存给成员变量。
- 一个类可以实例化多个对象,每个对象拥有独立的存储空间。

this关键字详解

this代表当前对象的引用。它在以下场景至关重要:

  1. 区分同名变量:解决成员变量与局部参数名称冲突的问题。
  2. 访问内部资源:this.变量或this.方法指向当前实例。
  3. 调用构造函数:在本类构造方法中调用另一个重载的构造方法。

实战案例:日期类中的this应用

在设置属性时,若参数名与成员变量名相同,直接使用year = year将无法完成赋值(因为赋值的是局部变量自己)。此时需用this.year指定成员变量:

public class MyDate {
    public int year;
    public int month;
    public int day;

    /**
     * 设置日期
     */
    public void setDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void printDate() {
        System.out.println("年:" + this.year + "月:" + this.month + "日:" + this.day);
    }

    public static void main(String[] args) {
        MyDate date = new MyDate();
        date.setDate(2022, 3, 25);
        date.printDate(); // 输出:年:2022月:3日:25
    }
}

构造方法与对象初始化

构造方法用于在对象创建时进行初始化。它与普通方法不同:

  • 无返回值,甚至不能写void。
  • 方法名与类名完全一致。

若程序员未定义构造方法,编译器会自动提供一个无参构造方法(隐藏构造器)。一旦显式定义了带参构造方法,系统将不再提供默认的无参构造。

构造方法的链式调用

在一个构造方法中使用this()调用本类其他构造方法,可以简化代码。但有两点限制:
- this()必须位于方法第一行。
- 严禁形成调用环(A调B,B调A)。

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

    // 无参构造
    public Student() {
        // 调用下面的有参构造
        this("未知", 0);
    }

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

对象字符串表示:重写toString

在Java中,直接使用System.out.println(对象)通常会输出对象的哈希地址。为了打印友好的文本信息,需要重写toString方法。

当println遇到非String类型的参数时,会自动调用该对象的toString()方法返回文本表示。

@Override
public String toString() {
    return "Person{name='" + name + "', age=" + age + "}";
}

在使用IDEA等集成开发环境时,可通过右键菜单选择Generate -> toString自动生成该代码。

以上就是Java类与对象超基础讲解的详细内容,更多关于Java进阶学习、对象内存管理及常用API的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表