news 2026/6/16 9:40:58

第七章 面向对象

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第七章 面向对象

一、编程思想

1. 面向过程

将完整业务拆解为一步步执行的流程,按顺序逐步完成任务,聚焦执行步骤

2. 面向对象

先梳理程序中涉及的实体对象,以对象为核心,依靠对象自身属性与行为、以及对象间的协作来解决问题,聚焦实体与关系

二、类与对象

1. 对象

客观世界中一切事物都可看作对象,是实体在 Java 程序中的具象体现。 对象由两部分组成:

  • 属性:描述对象静态特征,使用变量表示;
  • 方法:描述对象动态行为、功能,使用方法表示。

2. 类与对象的关系

  • 类:多个同类对象的模板,统一描述这类对象具备的属性和行为;
  • 对象:类的实例,一个类可以创建出多个不同对象。

三、类的组成(开发重点)

类主要由成员变量(属性)成员方法构造方法三部分构成。

(一)成员变量(属性)

  1. 定义位置:类内部、所有方法外部。
  2. 语法格式
// 仅声明 数据类型 变量名; // 声明并直接赋值 数据类型 变量名 = 初始值;

注意:不能在类中单独写赋值语句,声明和赋值必须同行。
错误示例:

class A{ int value; value = 20; // 写法非法 }

取值原则:仅定义业务所需的属性即可,无需罗列对象所有特征。
默认初始值
成员变量拥有系统默认值,规则如下:
| 数据类型 | 默认值 |
| ---- | ---- |
| 整数类型(byte/short/int/long) | 0 |
| 浮点类型(float/double) | 0.0 |
| 字符类型(char) | 空字符 \u0000 |
| 布尔类型(boolean) | false |
| 引用类型 | null |
作用范围:当前整个类内有效。
命名规则:同一个类中,成员变量名不能重复;成员变量可与局部变量重名,同名时方法内优先使用局部变量。
成员变量 vs 局部变量

对比项局部变量成员变量
定义位置方法 / 代码块内部类内部、方法外部
默认值无默认值,必须先赋值再使用自带系统默认值
作用范围从定义处开始,到所属代码块结束整个类范围内有效
命名冲突作用域重叠时,不允许重名可与局部变量重名,局部变量优先级更高

(二)成员方法

描述对象具备的功能与行为,也叫成员方法。

  1. 定义位置:类内部、其他方法外部。
  2. 语法格式
修饰符 返回值类型 方法名(形参列表){ // 方法体:功能实现代码 }

区别于静态函数:普通成员方法不需要加static

  1. 组成拆分
  • 方法声明:修饰符、返回值类型、方法名、形参列表、异常,用来表明方法功能;
  • 方法实现:大括号内的代码,完成具体业务逻辑。

补充:一个方法可使用多个修饰符,修饰符顺序无要求。

方法重载(overload)
  1. 概念:同一个类中,多个方法名相同,但形参列表不同的一组方法。
  2. 判定规则(必须同时满足)
  • 方法名完全一致;
  • 形参列表不同(参数个数、数据类型、参数顺序任意一项不同即可);

仅参数名不同,不构成重载。 补充:返回值类型、修饰符、异常不参与重载判定。

  1. 调用规则 程序根据传入的实参自动匹配对应方法:优先精确匹配,匹配失败则向上兼容匹配,全部匹配失败则编译报错。
  2. 作用:提升代码通用性与灵活性,避免定义大量功能相似、名称不同的方法。

(三)构造方法(构造器)

类中一类特殊方法,主要用于创建对象并给成员变量初始化赋值

  1. 核心特点
  • 方法名必须和类名完全一致
  • 无返回值,连void也不能书写;
  • 支持方法重载;
  • 不能手动直接调用。
修饰符 类名(形参列表){ // 初始化代码 }
  1. 执行规则
  • 创建对象时由 JVM 自动调用,一个对象创建过程中,构造方法仅执行一次
  • 若类中未手动定义任何构造方法,JVM 会自动提供一个公共无参构造方法
  • 若类中已定义有参构造方法,JVM 不再自动生成默认无参构造。
  1. 开发建议 常规开发中,建议同时提供无参构造方法有参构造方法;有参构造的参数一般对应类的核心属性。

四、对象的创建与使用

1. 创建对象语法

类名 对象名 = new 类名();

2. 对象访问成员

  1. 操作属性
    // 赋值 对象名.属性名 = 值; // 取值 对象名.属性名;

2.调用方法

对象名.方法名(实参列表);

五、this 关键字(开发常用)

this代表当前对象,主要分两种用法。

1. this. 访问成员

  1. 用法:在成员方法、构造方法中使用,指代当前对象的成员。
    • this.属性名:访问当前对象的成员变量;
    • this.方法名(实参):调用当前对象的成员方法。
  2. 说明:多数场景下this.可省略;当成员变量与局部变量重名时,必须用this.区分成员变量

2. this () 调用本类构造方法

  1. 用法:仅能在构造方法中使用,用于调用本类其他构造方法。
    • this():调用本类无参构造方法
    • this(实参):调用本类有参构造方法
  2. 强制规则
    • 必须写在构造方法内第一行有效代码位置;
    • 禁止循环递归调用(多个构造方法不能互相嵌套调用)。

六、对象创建流程

  1. 分配堆内存空间,为所有成员变量赋予默认初始值
  2. 执行属性显式赋值(二次赋值);
  3. 执行构造方法(三次赋值,完成对象最终初始化)。

七、引用(理解难点)

  1. 概念:存储对象地址的变量,称为引用类型变量,简称引用。
  2. 存储内容:引用变量存的是对象在堆内存中的首地址
  3. 引用声明
类名 引用名; // 示例 Worker w;
  1. 空指针问题 若引用赋值为null,代表该引用没有指向任何对象;此时通过该引用调用属性 / 方法,编译正常,运行抛出NullPointerException空指针异常
  2. 赋值区别
  • 引用之间互相赋值:传递的是对象堆内存地址,多个引用可指向同一个对象;
  • 基本数据类型变量赋值:传递的是具体数值,变量之间互不影响。
  1. 使用场景:引用可作为方法形参、方法返回值、数组元素使用。

补充:JVM 内存分配简述

  • 栈空间:存储局部变量、引用变量(存放对象地址);
  • 堆空间:使用new创建的实体对象全部存放在堆中,对象的属性也在堆内存。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 9:40:57

RK3566嵌入式开发实战:从核心架构到AI部署的全面解析

1. 项目概述:为什么RK3566是当下嵌入式开发的“甜点”之选 最近几年,嵌入式开发领域的热度持续攀升,从智能家居、工业控制到边缘AI盒子,开发者们都在寻找一颗性能足够、功耗可控、生态完善且价格合理的核心处理器。如果你也在这个…

作者头像 李华
网站建设 2026/6/16 9:40:56

百度高权重域名在哪买比较好?

SEO权重是各大搜索引擎给予网站赋予的评估或评价等级,代表着网站在某领域中的权威性,另一方面也代表着搜索引擎对其友好度越强,会在排名、流量和信任度评价给予较好的扶持。因此很多企业新建站的时候都想要使用一些高权重的域名,那…

作者头像 李华
网站建设 2026/6/16 9:36:56

世界地理数据宝库:如何用Geo-JSON快速启动你的地图项目

世界地理数据宝库:如何用Geo-JSON快速启动你的地图项目 【免费下载链接】world.geo.json Annotated geo-json geometry files for the world 项目地址: https://gitcode.com/gh_mirrors/wo/world.geo.json 你是否曾经为了一个简单的可视化项目而花费数小时寻…

作者头像 李华
网站建设 2026/6/16 9:29:56

从零构建柑橘数据集:智慧农业AI模型训练实战指南

1. 项目概述:从“柑橘”到“数据”的认知升级如果你在搜索引擎里输入“柑橘数据集”,大概率会看到一堆学术论文、开源代码仓库和模型评测榜单。这听起来似乎离我们很远,像是实验室里研究员们才关心的东西。但作为一个在农业科技和数据领域摸爬…

作者头像 李华
网站建设 2026/6/16 9:24:51

Klipper终极配置指南:如何让3D打印机性能翻倍

Klipper终极配置指南:如何让3D打印机性能翻倍 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper Klipper是一款革命性的3D打印机固件,它采用创新的主机-从机架构&#xff0c…

作者头像 李华