【Java篇】无形至有形,法与道的编织:类与对象初探

【Java篇】无形至有形,法与道的编织:类与对象初探

文章目录

类和对象(上)

💬 欢迎讨论:如果你在阅读过程中有任何疑问或想要进一步探讨的内容,欢迎在评论区留言!我们一起学习、一起成长。

👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏并分享给更多想了解 Java 编程的朋友!

🚀 继续学习之旅:今天,我们将深入探讨 Java 中的类和对象。这些是每个 Java 程序员必备的技能。

一、面向对象的初步认知

1.1 什么是面向对象

Java是一门纯面向对象的语言(Object Oriented Programming,简称OOP)。在面向对象的世界中,一切皆为对象。
面向对象是一种解决问题的思想,主要依靠对象之间的交互来完成任务。采用面向对象的编程方式,不仅符合人们对事物本质的认识,还极大地有助于大型程序的设计、扩展和维护。

1.2 面向对象与面向过程

面向过程强调程序的执行流程,注重将问题拆解成一系列的操作步骤,每一步骤都必须严格按顺序执行。例如,传统的洗衣服过程要求依次完成浸泡、搓洗、漂洗、甩干等操作,任何一步出错都可能导致整体流程无法正常进行。

面向对象则更关注事物本身,通过对现实世界中对象的抽象,将事物的属性和行为封装在一个类中,借助对象之间的交互来完成复杂任务。以洗衣机为例,用户只需关心“放入衣物”、“添加洗衣粉”、“启动洗衣机”等接口,而无需了解内部的工作细节。这种方式使程序设计更加直观、灵活且易于维护。

注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

二、类定义和使用

2.1 简单认识类

类是用来对一个实体(对象)进行描述的。它主要描述该实体具有哪些属性(例如外观尺寸、颜色等)以及哪些功能(例如洗衣、烘干等)。完成对实体的抽象之后,计算机便能识别这种描述,从而在程序中使用该类创建实际对象。

在这里插入图片描述

上图左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知),但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言。

2.2 类的定义格式

在Java中定义类时,需要使用关键字 class。基本语法格式如下:

// 创建类的基本格式classClassName{ field;// 字段(属性)或成员变量 method;// 行为或成员方法}

类中包含的内容统称为类的成员。

  • 成员属性:用于描述类的特征;
  • 成员方法:用于描述类所具备的功能。

示例一:以洗衣机类为例的模板

classWashMachine{publicString brand;// 品牌publicString type;// 型号publicdouble weight;// 重量publicdouble length;// 长publicdouble width;// 宽publicdouble height;// 高publicString color;// 颜色publicvoidwashClothes(){// 洗衣服功能System.out.println("洗衣功能");}publicvoiddryClothes(){// 脱水功能System.out.println("脱水功能");}publicvoidsetTime(){// 定时功能System.out.println("定时功能");}}

将洗衣机这一现实对象用Java语言描述后,经过 javac 编译生成 .class 文件,JVM便能识别并使用这个类。

注意事项:

  1. 类名应采用大驼峰命名法;
  2. 成员前一般统一使用 public 修饰(后续会详细说明);
  3. 此处所写的方法均不带 static 关键字(后续会讲解其意义)。

2.3 小练习

2.3.1 定义一个狗类
classPetDog{publicString name;// 狗的名字publicString color;// 狗的颜色// 狗的属性描述publicvoidbarks(){System.out.println(name +": 旺旺旺~~~");}// 狗的行为描述publicvoidwag(){System.out.println(name +": 摇尾巴~~~");}}
2.3.2 定义一个学生类

下面给出一个简单的学生类示例:

publicclassStudent{publicString name;publicString gender;publicshort age;publicdouble score;publicvoidDoClass(){// 上课方法}publicvoidDoHomework(){// 做作业方法}publicvoidExam(){// 考试方法}}

在定义类时需注意以下几点

  1. 一般一个文件中只定义一个类;
  2. 含有 main 方法的类通常应使用 public 修饰(例如Eclipse默认在 public 修饰的类中查找 main 方法);
  3. public 修饰的类名必须与文件名相同;
  4. 修改 public 类的名称需谨慎。

三、类的实例化

3.1 什么是实例化

当我们使用 class 关键字定义了一个类,就相当于在计算机中定义了一种新的类型(如同 intdouble 等内置类型)。只不过 intdouble 是 Java 语言自带的类型,而类是程序员自定义的类型。

有了这种新类型之后,就可以用它来创建对象(也称为类的实例)。用类类型创建对象的过程称为类的实例化,在 Java 中通过 new 关键字配合类名来完成。例如:

publicclassStudent{publicString name;publicString gender;publicshort age;publicdouble score;publicvoidDoClass(){}publicvoidDoHomework(){}publicvoidExam(){}publicstaticvoidmain(String[] args){// 通过 new 关键字实例化对象Student s1 =newStudent(); s1.name ="Li Lei"; s1.gender ="男"; s1.age =18; s1.score =3.8;Student s2 =newStudent(); s2.name ="Han Meimei"; s2.gender ="女"; s2.age =19; s2.score =4.0;Student s3 =newStudent(); s3.name ="Jim"; s3.gender ="男"; s3.age =18; s3.score =2.6;}}

注意事项:

  1. new 关键字用于创建对象的实例;
  2. 使用 . 号来访问对象的属性和方法;
  3. 同一个类可以创建多个对象,每个对象独立占用内存空间,存储各自的成员变量。

3.2 类和对象的说明

  1. 只是一个“模型”或“蓝图”,用来描述对象应该包含哪些成员变量和成员方法;它本身并不直接占用实际的存储空间。
  2. 对象 是类的实例化结果,才真正占用物理空间,可以用来存储数据,也能执行方法。
  3. 同一个类可以实例化出多个对象,对象之间的成员变量互不影响
  4. 类比:类就像“建筑设计图”,对象就像“根据设计图建造出来的房子”。设计图只有一份,但可以建造出很多房子,每个房子都有自己的空间和家具。
在这里插入图片描述


在这里插入图片描述

示例代码:

publicclassPetDog{publicString name;publicString color;publicvoidbarks(){System.out.println(name +": 旺旺旺~~~");}publicvoidwag(){System.out.println(name +": 摇尾巴~~~");}publicstaticvoidmain(String[] args){PetDog dog1 =newPetDog(); dog1.name ="阿黄"; dog1.color ="黑黄"; dog1.barks(); dog1.wag();PetDog dog2 =newPetDog(); dog2.name ="赛虎"; dog2.color ="棕白"; dog2.barks(); dog2.wag();}}

执行结果:

阿黄: 旺旺旺~~~ 阿黄: 摇尾巴~~~ 赛虎: 旺旺旺~~~ 赛虎: 摇尾巴~~~

四、this引用

4.1 为什么要有 this 引用

先来看一个日期类的例子:

publicclassDate{publicint year;publicint month;publicint day;publicvoidsetDay(int y,int m,int d){ year = y; month = m; day = d;}publicvoidprintDate(){System.out.println(year +"/"+ month +"/"+ day);}publicstaticvoidmain(String[] args){Date d1 =newDate();Date d2 =newDate();Date d3 =newDate(); d1.setDay(2020,9,15); d2.setDay(2020,9,16); d3.setDay(2020,9,17); d1.printDate();// 2020/9/15 d2.printDate();// 2020/9/16 d3.printDate();// 2020/9/17}}

这个代码能正常运行,但仔细思考时,会有两个疑问:

在这里插入图片描述
  1. 如果形参名和成员变量名相同,例如都叫 yearmonthday,那在 setDay 方法里写 year = year; 究竟是谁给谁赋值?
  2. d1, d2, d3 分别调用了 setDayprintDate 方法,而这两个方法中并没有任何“对象标识”的信息,它们是如何知道当前要修改或打印的是哪个对象的数据呢?

为解决这两个疑惑,Java 提供了 this 引用。

4.2 什么是 this 引用

this 引用指向“当前对象”,也就是“调用该成员方法的那个对象”。在成员方法中,对所有成员变量的访问,实际上都隐式地通过 this 引用完成,但对程序员是透明的。

示例:当我们写 year = y; 时,编译器底层会将其视作 this.year = y;,其中 this 就是那个正在调用 setDay 方法的对象。

publicvoidsetDay(int year,int month,int day){// 此时如果写: year = year;// 就会产生歧义. 下面使用this来指明是给当前对象的year赋值.this.year = year;this.month = month;this.day = day;}

4.3 this 引用的特性

  1. this 的类型:与所在类相同,哪个对象在调用方法,this 就指向哪个对象;
  2. 只能在“成员方法”中使用this 不存在于静态方法或其他语法结构中;
  3. 只能引用当前对象:无法在一个对象的方法中让 this 指向另一个对象;
  4. this 是成员方法中的第一个“隐藏”参数:当对象调用成员方法时,编译器会自动将调用者对象的引用作为实参传给方法,方法体内的 this 则用于接收该引用。

示例:

publicclassDate{publicint year;publicint month;publicint day;publicvoidsetDay(int year,int month,int day){this.year = year;// this.year 表示“当前对象的 year”this.month = month;// this.month 表示“当前对象的 month”this.day = day;// this.day 表示“当前对象的 day”}publicvoidprintDate(){System.out.println(this.year +"/"+this.month +"/"+this.day);}publicstaticvoidmain(String[] args){Date d =newDate(); d.setDay(2021,6,9); d.printDate();// 2021/6/9}}
在这里插入图片描述

五、总结与展望

5.1 总结

  1. 面向对象思想:通过对现实事物的抽象,利用类来描述其属性和行为,并通过实例化对象进行具体操作。这种方法比面向过程更能体现人们对事物本质的认知,特别适合大型程序的设计和维护。
  2. 类的定义与使用:使用 class 关键字创建类,并在类中定义成员变量(属性)和成员方法(行为),为后续实例化提供模板。
  3. 对象的实例化:通过 new 关键字和类名生成对象,每个对象都拥有独立的内存空间,用于存储自身的成员变量和方法。
  4. this 引用:在成员方法中用于指代“当前对象”,可以有效避免形参与成员变量重名带来的歧义,并在方法内部显式访问或修改当前对象的属性。

5.2 展望

  • 对象的构造与初始化:了解构造方法、默认初始化、就地初始化等机制,掌握对象在创建时如何完成初始赋值。
  • 封装与访问控制:通过访问限定符(如 publicprivate 等)保护对象内部数据,保证程序的安全性和可维护性。
  • 静态成员与代码块:学习 static 修饰符的作用以及静态成员变量、静态方法的特点;同时深入理解普通代码块、构造代码块和静态代码块在初始化中的应用。
  • 内部类:探索在类中定义类的高级用法,包括实例内部类、静态内部类、局部内部类和匿名内部类的语法和应用场景。

通过本篇的学习,我们已经打下了面向对象编程的基础。后续内容将进一步扩展和深入,让你在编写 Java 程序时更加得心应手。若有任何疑问,欢迎在评论区留言交流,让我们一起学习、共同进步!


以上就是关于【Java篇】无形至有形,法与道的编织:类与对象初探啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️

在这里插入图片描述

Read more

深入解剖STL RB-tree(红黑树):用图解带入相关复杂操作实现

深入解剖STL RB-tree(红黑树):用图解带入相关复杂操作实现

👇点击进入作者专栏: 《算法画解》 ✅ 《linux系统编程》✅ 《C++》 ✅ 文章目录 * 一、红黑树介绍 * 1. 什么是红黑树? * 2. 红黑树的规则 * 3. 为什么最长路径不超过最短路径的两倍? * 4. 红黑树的效率 * 二、红黑树的实现 * 2.1 红黑树的节点结构 * 2.2 红黑树整体结构 * 三、红黑树的插入操作 * 3.1 插入的大致流程 * 3.2 插入后的三种情况 * 情况1:叔叔节点存在且为红色(变色处理) * 情况2:叔叔节点不存在或为黑色 + cur和p在同一侧(单旋+变色) * 情况3:叔叔节点不存在或为黑色 + cur和p在不同侧(双旋+变色) * 3.3 插入完整代码 * 3.4 旋转操作的实现

By Ne0inhk
Redis核心通用命令深度解析:结合C++ redis-plus-plus 实战指南

Redis核心通用命令深度解析:结合C++ redis-plus-plus 实战指南

前言:为何选择 Redis 与 C++? 在当今这个数据驱动的时代,高性能的数据存储与访问是构建现代化应用的基石。Redis,作为一个开源的、基于内存的键值对存储数据库,以其无与伦比的读写速度、丰富的数据结构、以及灵活的应用场景(缓存、消息队列、会话存储、排行榜等),成为了后端开发者的瑞士军刀。 与此同时,C++ 作为一门追求极致性能的编程语言,长期以来在游戏开发、金融交易、高性能计算等领域占据着主导地位。当 C++ 的高性能与 Redis 的高速度相结合时,我们便能够构建出响应迅捷、吞吐量巨大的应用程序。 然而,要将二者优雅地结合起来,我们需要一个强大的“桥梁”——Redis 客户端库。redis-plus-plus 就是这样一个专为现代 C++ (C++11 及以上) 设计的优秀库。它不仅封装了 Redis 的原生协议,提供了类型安全、易于使用的 API,

By Ne0inhk

几小时完成生鲜配送系统!飞算JavaAI专业版:智能引导+两大工具承包开发全流程

作为一名Java开发者,我曾无数次被「需求拆解难、后期调试烦」的问题困住,最近面对一个生鲜配送系统的开发需求,光梳理业务逻辑、设计表结构就要耗上大半天,后续还要花时间处理代码规范、依赖冲突,往往一周才能拿出可运行的项目。直到试用了飞算JavaAI专业版,才发现AI辅助开发能如此高效:借助它的智能引导系统和两大核心AI工具,我从需求输入到项目初步完成仅需几小时,大大节省了我的时间。 智能引导五步法:让模糊需求快速落地 做生鲜配送系统前,我的需求很简单:「支持用户下单、订单跟踪、配送员调度、库存管理」,但具体怎么拆分模块、设计接口完全没头绪。放在以前,至少要花1天时间和产品经理对接需求文档,而飞算JavaAI的智能引导系统,直接帮我把模糊需求变成了标准化的开发方案。 第一步「理解需求」就超出预期。我在输入框写下核心诉求后,系统10秒内就拆解出几个关键点,还补充了我没考虑到很多功能——比如当生鲜商品临近保鲜期时,系统会自动触发库存预警,异常订单(如地址不明确、支付超时)会自动分流处理,简直像有个资深行业顾问在补位。 第二步「设计接口」根据我的需求创建了繁多的接口供我选择,并且可

By Ne0inhk
1、Java快速开发平台崛起:六大国产顶尖框架全景对比与精准选型实战指南

1、Java快速开发平台崛起:六大国产顶尖框架全景对比与精准选型实战指南

2026最新Java快速开发框架选型宝典 国内六大热门框架全景对比+实战决策树 关键词:Java快速开发平台、2026Java框架、RuoYi、JeecgBoot、Pig、BladeX、JeeSite、Guns、企业级开发选型、微服务框架、低代码开发、Java框架对比 适用人群:Java架构师、后端开发工程师、技术负责人、初创公司技术选型者、企业信息化开发团队 在企业级Java开发领域,**“降本提效”**早已成为突破开发瓶颈的核心诉求——从零搭建项目、重复编写CRUD代码、手动开发权限/日志/监控等基础模块,不仅会消耗80%的开发精力,还会因团队技术差异导致项目质量参差不齐。而Java快速开发平台的出现,彻底改变了这一现状:它整合了企业级开发的通用能力,提供标准化架构、开箱即用的功能模块、一键生成的代码工具,让开发者能将90%的精力聚焦业务创新。 随着国内开源生态的成熟,一批本土化Java快速开发框架脱颖而出,它们适配国内开发者编码习惯、贴合企业实际需求,远比国外框架更易落地。2026年,RuoYi、JeecgBoot、Pig、

By Ne0inhk