发布时间:2026/7/7 8:01:04
Java学习--面向对象基础
文章摘要面向对象是Java编程的核心思想之一。它不只是“创建一个类、new一个对象”这么简单更重要的是学会把数据和操作数据的行为组织在同一个对象中并通过构造器完成初始化借助this明确当前对象再利用封装性控制外部对数据的访问。简单理解类是对象的模板对象是类的实例属性保存对象的数据方法描述对象能够执行的行为。1.面向对象的基本概念1.1面向对象到底是什么面向对象强调现实世界中的事物可以抽象为对象对象既携带数据也可以执行与这些数据相关的操作。程序不再只是零散变量和函数的堆积而是围绕一个个对象组织起来。例如要保存学生“张三”的姓名和年龄仅用一个基本数据类型无法同时描述String类型的姓名和int类型的年龄。此时可以定义Student类把name和age组合成一个新的数据类型。核型价值确定了对象就能找到与该对象相关的数据和行为代码的结构会更清晰也更接近人类理解现实事务的方法。2.类、对象、属性和方法2.1类是模板类可以理解为一张模板或一份设计图他规定对象应该具备哪些属性和方法。在项目中通常会把用于描述数据的类放在entity包中这类类常被成为实体类。package entity; public class Student { public String name; // 属性姓名 public int age; // 属性年龄 public void run() { // 方法行为 System.out.println(跑步); } }2.2 对象是类的实例对象是根据类创建出来的具体实例。类本身只定义结构真正携带数据的是对象。创建对象使用new关键字。Student s1 new Student(); s1.name 张三; s1.age 18; s1.run();上面s1是一个引用变量它保存Student对象在内存中的地址。通过“对象名.属性名”可以读写属性通过“对象名。方法名”可以调用行为。3.对象在内存中的执行过程理解对象的内存过程可以帮助我们解释为什么对象之间可能互不影响也可以解释为什么多个变量指向同一个对象时会相互影响。1. Java 源文件被编译为 .class 字节码并在运行时加载。2. main 方法进入方法调用栈。3. 执行 new Student() 时在堆内存中开辟一块空间。4. 对象的成员变量先获得默认值例如 name 为 null、age 为 0。5. 堆内存地址返回给引用变量 s1。6. 给 s1.name 和 s1.age 赋值本质上是在修改堆中对象的数据。7. 调用 s1.run() 时根据对象类型找到 Student 类中的 run 方法并执行。容易混淆的点s1不是对象本身它是保存对象地址的引用变量真正的Student对象位于堆内存中。4.类和对象的常见注意事项类名一般采用大驼峰命名法例如 Student、Teacher、SchoolInfo。定义在类中、方法外的变量叫成员变量定义在方法或代码块中的变量叫局部变量。成员变量在创建对象时会自动获得默认值局部变量则必须先赋值后使用。一个 .java 文件可以定义多个类但只能有一个 public 类并且 public 类名必须与文件名一致。不同 new 出来的对象通常互不影响多个引用变量指向同一个对象时修改对象会被所有引用看到。数据类型成员变量默认值byte、short、char、int、long0float、double0.0booleanfalseString、数组、其他引用类型null5.this关键字this表示当前对象。成员方法运行时一定是由某个对象发起调用的this就指向这个正在调用方法的对象。5.1 为什么需要this当方法名或局部变量名与成员变量名相同时Java会优先使用离自己更近的局部变量或参数。此时使用this.成员变量可以明确访问的是当前对象的属性。public class Student { private String name; private int age; public void setName(String name) { this.name name; } }阅读方式this.name name 可以读成把参数 name 的值赋给当前对象的成员变量 name。5.2 this还能调用成员变量public void run(String name) { System.out.println(this.name); System.out.println(没事跑跑步); } public void eat() { this.run(Jerry); }在没有歧义时this. 可以省略但在实体类中显式写出 this往往能让代码含义更清楚。6.构造器创建对象时完成初始化构造器是创建对象时自动执行的特殊结构。它看起来像方法但没有返回值类型名称必须与类名完全一致。public Student() { // 无参构造器 }6.1 无参构造器如果类中没有显示编写任何构造器Java会提供一个默认的无参构造器。因此Student s new Student();可以正常执行。6.2 有参构造器有参构造器可以在创建对象的同时完成属性赋值。包含所有成员变量参数的构造器通常称为全参构造器。public Student(String name, int age) { this.name name; this.age age; } // 创建对象 Student s1 new Student(张三, 18);重要规则只要类中显式编写了有参构造器Java 就不会再自动提供默认无参构造器。仍需无参创建对象时必须手动补写无参构造器。注意在 IntelliJ IDEA 中可以通过 Alt Insert 或 Generate 菜单快速生成无参、部分参数或全参构造器。7.封装控制对向数据的访问封装是Java面向对象的三大特性之一另外两个是继承和多态。封装的核心不是简单地“把属性改成private”而是隐藏不应该被外部直接操作的实现细节并通过公开方法提供受控访问。7.1 为什么不能把所有属性都设为public如果属性使用 public 修饰项目中的其他类可以随意修改它。比如学校名称原本固定为“北京大学”但外部代码却可以把它改成其他内容这会破坏对象数据的合理性。7.2 标准封装步骤1. 使用 private 修饰成员变量让属性只能在当前类内部直接访问。2. 根据需要提供 public 的 Getter 方法读取属性。3. 根据需要提供 public 的 Setter 方法修改属性。4. 在 Setter 中加入参数校验可以阻止非法数据进入对象。public class School { private String schoolName 北京大学; private String address; private String phone; public String getSchoolName() { return this.schoolName; } public String getAddress() { return this.address; } public void setAddress(String address) { this.address address; } public String getPhone() { return this.phone; } public void setPhone(String phone) { this.phone phone; } }上面的 schoolName 只提供 get 方法因此外部只能读取不能修改address 和 phone 同时提供 get、set 方法因此既可以获取也可以更新。8.实体JavaBean实体JavaBean可以理解为用于携带数据的实体类。对象负责保存和传递数据而对象又必须依赖实体类来创建因此实体类是Java程序中非常基础的组成部分。8.1 初学者阶段常见的JavaBean写法类通常放在 entity、model 或 domain 包中。成员变量使用 private 修饰。提供无参构造器。根据需要提供全参构造器。为属性提供 Getter 和 Setter。类名能够清楚表达其所描述的数据例如 Student、Product、Order。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 this.name; } public void setName(String name) { this.name name; } public int getAge() { return this.age; } public void setAge(int age) { this.age age; } }9.成员变量与局部变量的区别比较项成员变量局部变量定义位置类中、方法外方法、构造器或代码块内部默认值创建对象时自动获取默认值没有默认值使用前必须赋值内存位置通常随对象存放在堆中通常随方法调用存在与栈帧中作用域可以被类中的成员方法访问只能在所属的代码块中使用生命周期通常与对象共存亡随方法调用产生方法结束后消失访问方式常通过 this.变量名访问直接使用变量名记忆口诀成员变量属于对象局部变量属于一次方法执行。10.综合示例把知识点串起来下面的示例同时使用了类、对象、成员变量、this、构造器和封装。它也是初学阶段最值得反复手写的一段代码。public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { this.name name; this.setAge(age); } public String getName() { return this.name; } public void setName(String name) { this.name name; } public int getAge() { return this.age; } public void setAge(int age) { if (age 0 age 150) { this.age age; } } public void introduce() { System.out.println(我叫 this.name 今年 this.age 岁。); } }public class StudentTest { public static void main(String[] args) { Student s1 new Student(张三, 18); s1.introduce(); Student s2 new Student(); s2.setName(李四); s2.setAge(20); s2.introduce(); } }这个版本比直接公开属性更安全年龄只能通过 setAge 修改而且能够在方法中检查范围。这正是封装的实际意义——让对象自己维护数据的有效性。11.初学者常见错误错误原因和修正构造器写了void构造器没有返回值类型连 void 也不能写有参构造器存在却继续 new Student()显式写有参构造器后默认无参构造器失效需要手动补写this.name this.name左右两边都指成员变量没有使用参数值应写 this.name name局部变量未赋值就使用局部变量没有默认值必须先初始化所有属性都设为 public外部可以绕过校验随意修改应使用 private 配合 Getter / Setter。把类和对象混为一谈类是模板对象是根据模板创建的具体实例以为两个引用就是两个对象两个变量可能保存同一个地址修改其中一个会影响另一个12.总结学习 Java 面向对象时可以按照“类定义结构 → new 创建对象 → 构造器初始化 → this 指向当前对象 → private 隐藏属性 → Getter / Setter 控制访问”的顺序理解。掌握这一条主线后后续学习继承、多态、接口、集合以及 Spring 项目中的实体类都会轻松很多。最终知识链类是模板new 产生对象对象在堆中保存数据this 表示当前对象构造器负责初始化封装负责保护数据JavaBean 负责携带和传递数据。13.思考问题1.为什么成员变量有默认值而局部变量没有2.只写有参构造器后为什么无参构造器会失效

相关新闻

2026年护眼灯品牌推荐:实力出众的护眼台灯品牌推荐,护眼效果突出
2026/7/7 8:01:04

2026年护眼灯品牌推荐:实力出众的护眼台灯品牌推荐,护眼效果突出

​身边越来越多低年级孩子戴上厚眼镜,每次去眼科复查,都能看到不少小小年纪度数就很高的小朋友。当了家长才后知后觉,孩子近视度数居高不下,很多时候都是劣质台灯惹的祸。之前为了给自家娃挑一盏合格台灯踩了无数坑,对…

阅读更多
局域网视频会议软件选型指南:功能、部署与成本全面解析
2026/7/7 8:01:04

局域网视频会议软件选型指南:功能、部署与成本全面解析

核心摘要局域网视频会议软件更适合对数据安全、内网隔离、稳定可控有要求的组织,如政府、央国企、金融、医疗、教育、军工及大型集团。选型时不要只看“能不能开会”,应重点评估部署方式、并发能力、音视频质量、权限与安全、系统集成、国产化适配、运维…

阅读更多
kml_adapter实战案例:在AI训练和科学仿真中的成功应用
2026/7/7 8:01:04

kml_adapter实战案例:在AI训练和科学仿真中的成功应用

kml_adapter实战案例:在AI训练和科学仿真中的成功应用 【免费下载链接】kml_adapter Adapter for Kunpeng Math Library 项目地址: https://gitcode.com/openeuler/kml_adapter 前往项目官网免费下载:https://ar.openeuler.org/ar/ openEuler / …

阅读更多
Java学习--面向对象基础
2026/7/7 8:01:04

Java学习--面向对象基础

文章摘要面向对象是Java编程的核心思想之一。它不只是“创建一个类、new一个对象”这么简单,更重要的是学会把数据和操作数据的行为组织在同一个对象中,并通过构造器完成初始化,借助this明确当前对象,再利用封装性控制外部对数据的…

阅读更多
2026年护眼灯品牌推荐:实力出众的护眼台灯品牌推荐,护眼效果突出
2026/7/7 8:01:04

2026年护眼灯品牌推荐:实力出众的护眼台灯品牌推荐,护眼效果突出

​身边越来越多低年级孩子戴上厚眼镜,每次去眼科复查,都能看到不少小小年纪度数就很高的小朋友。当了家长才后知后觉,孩子近视度数居高不下,很多时候都是劣质台灯惹的祸。之前为了给自家娃挑一盏合格台灯踩了无数坑,对…

阅读更多
局域网视频会议软件选型指南:功能、部署与成本全面解析
2026/7/7 8:01:04

局域网视频会议软件选型指南:功能、部署与成本全面解析

核心摘要局域网视频会议软件更适合对数据安全、内网隔离、稳定可控有要求的组织,如政府、央国企、金融、医疗、教育、军工及大型集团。选型时不要只看“能不能开会”,应重点评估部署方式、并发能力、音视频质量、权限与安全、系统集成、国产化适配、运维…

阅读更多
kml_adapter实战案例:在AI训练和科学仿真中的成功应用
2026/7/7 8:01:04

kml_adapter实战案例:在AI训练和科学仿真中的成功应用

kml_adapter实战案例:在AI训练和科学仿真中的成功应用 【免费下载链接】kml_adapter Adapter for Kunpeng Math Library 项目地址: https://gitcode.com/openeuler/kml_adapter 前往项目官网免费下载:https://ar.openeuler.org/ar/ openEuler / …

阅读更多
2026 视频主要内容方案选型:怎么选才能合理控制研发项目成本
2026/7/7 8:01:04

2026 视频主要内容方案选型:怎么选才能合理控制研发项目成本

先说明白核心判断 针对学生群体课堂复习、论文调研、知识自测的场景,选2026年视频主要内容处理方案控制项目成本,核心逻辑是匹配需求选功能,不为用不到的企业级服务付费:轻度需求用免费额度覆盖,高频学习需求选适配学…

阅读更多
终极GTA5安全菜单:YimMenu完整防护与功能指南
2026/7/7 7:01:04

终极GTA5安全菜单:YimMenu完整防护与功能指南

终极GTA5安全菜单:YimMenu完整防护与功能指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …

阅读更多
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御
2026/7/7 2:21:40

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

阅读更多
3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略
2026/7/6 12:19:58

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略

3步彻底解决Windows右键菜单混乱问题:ContextMenuManager使用全攻略 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾为Windows右键菜单中那些…

阅读更多
GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复
2026/7/6 14:01:07

GXDE OS下Wayland兼容性实战:从deepin-mutter原理到VMware Tools修复

如果你正在用 GXDE OS 或者任何基于 Deepin 的发行版,并且遇到了“检测到窗口系统采用 Wayland 协议,程序即将退出”这类弹窗,或者发现 VMware Tools 在 Ubuntu 24.04 这类默认 Wayland 的系统上启动失败,那这篇文章就是为你准备的…

阅读更多
国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)
2026/7/7 0:01:01

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot)

国产化信创改造:达梦/人大金仓适配与多数据库兼容方案实战(SpringBoot) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-o…

阅读更多
CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树
2026/7/7 0:01:01

CentOS 7/8 SSH 连接失败:5步系统性排错流程与决策树

CentOS SSH连接故障排查:从基础检查到深度修复的完整指南引言当你尝试通过Xshell或其他SSH客户端连接CentOS服务器时,突然遭遇"Connection refused"或"Connection timed out"的错误提示,这种经历对任何运维人员或开发者来…

阅读更多
B站评论删除 API 逆向分析:3 个关键参数 (oid, type, csrf) 获取与实战
2026/7/7 0:01:01

B站评论删除 API 逆向分析:3 个关键参数 (oid, type, csrf) 获取与实战

B站评论删除API逆向工程实战:关键参数解析与自动化操作指南1. 理解B站评论删除机制的核心逻辑在视频平台内容管理中,评论删除功能涉及复杂的权限验证和数据交互流程。B站的评论删除API采用了一套基于Web安全标准的防护机制,主要依赖三个关键参…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/6 13:57:42

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/6 7:18:59

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/5 15:33:35

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多