Java入门9 类和对象
1. 面向对象的初步认知1.1 什么是面向对象Java是一门纯面向对象的语言(Object Oriented Program简称OOP)在面向对象的世界里一切皆为对象。面向对象是解决问题的一种思想主要依靠对象之间的交互完成⼀件事情。用面向对象的思想来设计程序更符合人们对事物的认知对于大型程序的设计、扩展以及维护都非常友好。1.2 面向对象与面向过程传统洗衣服过程传统的方式注重的是洗衣服的过程少了一个环节可能都不行。 而且不同衣服洗的方式时间长度拧干方式都不同处理起来就比较麻烦。如果将来要洗鞋子那 就是另⼀种方式。 按照该种方式来写代码将来扩展或者维护起来会比较麻烦。现代洗衣服过程以面向对象方式来进行处理就不关注洗衣服的过程具体洗衣机是怎么来洗衣服如何来甩干的用户不用去关心只需要将衣服放进洗衣机倒⼊洗衣粉启动开关即可通过对象之间的交互来完成的。注意面向过程和面向对象并不是一门语言而是解决问题的方法没有那个好坏之分都有其专门的应用场景。2. 类定义和使用面相对象程序设计关注的是对象而对象是现实生活中的实体比如洗衣机。但是洗衣机计算机并不认识需要开发人员告诉给计算机什么是洗衣机。上图左侧就是对洗衣机简单的描述该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知)但是这些简化的抽象结果计算机也不能识别开发人员可以采用某种面相对象的编程语言来进行描述比如Java语言。2.1 简单认识类类是用来对⼀个实体(对象)来进行描述的主要描述该实体(对象)具有哪些属性(外观尺寸等)哪些功能(用来干啥)描述完成后计算机就可以识别了。比如洗衣机它是⼀个品牌在Java中可以将其看成是⼀个类别。属性产品品牌型号产品重量外观尺存颜色...功能洗衣烘干、定时....在Java语言中如何对上述的洗衣机类来进行定义呢2.2 类的定义格式在Java中定义类时需要用到class关键字具体语法如下class ClassName{ //创建类 friend //属性或成员变量 method //行为或成员方法 }class为定义类的关键字ClassName为类的名字{}中为类的主体。类中包含的内容称为类的成员。属性主要是用来描述类的称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能称为类的成员方法。采用Java语言将洗衣机类在计算机中定义完成经过javac编译之后形成.class文件在JVM的基础上计算机就可以识别了。注意事项• 类名注意采用大驼峰定义• 成员前写法统⼀为public后面会详细解释• 此处写的方法不带static关键字.后面会详细解释2.3 练习• 定义一个Dog类大家可以思考一下哪些是Dog的属性哪些是Dog的行为参考代码如下• 定义⼀个学生类Student大家可以思考一下哪些是Student的属性哪些是Student的行为参考代码如下注意事项1. 一般一个文件当中只定义一个类2. public修饰的类必须要和文件名相同3. 不要轻易去修改public修饰的类的名称如果要修改通过开发工具修改3. 类的实例化3.1 什么是实例化定义了一个类就相当于在计算机中定义了一种新的类型与intdouble类似只不过int和double是java语言自带的内置类型而类是用户自定义了⼀个新的类型比如上述的PetDog类和Student类。它们都是类(⼀种新定义的类型)有了这些⾃定义的类型之后就可以使用这些类来定义实例(或者称为对象)。用类类型创建对象的过程称为类的实例化在java中采用new关键字配合类名来实例化对象。3.2 如何访问对象当中的成员注意事项• new关键字用于创建一个对象的实例.• 使用来访问对象中的属性和方法.• 同一个类可以创建多个实例.3.3 类和对象的再次理解1.类只是一个模型⼀样的东西用来对⼀个实体进行描述限定了类有哪些成员.2.类是⼀种自定义的类型可以用来定义变量.3. ⼀个类可以实例化出多个对象实例化出的对象占用实际的物理空间存储类成员变量4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子类就像是设计图只设计出需要什么东西但是并没有实体的建筑存在同样类也只是⼀个设计实例化出的对象才能实际存储数据占用物理空间。4. this关键字4.1 为什么要有this引用如下代码定义了一个Date类Date类中包含3个属性分别是yearmonthday。分别使用setDay和 printDate对进行设置和打印日期。提出2个疑问1. 形参名不小心与成员变量名相同会发生什么public void setDay(int year, int month, int day){ year year; month month; day day; }首先要搞清楚括号里的year,month,day都是形参需要接收新的数据来填充。而类中方法外的year,month,day则是成员变量成员变量有对应的默认值比如当前三个属性都是int类型所以成员变量默认值都是0我们现在的目的就是想成员变量year 形参接收到的year如果没有this关键字Java程序就会优先把左右两边同名的year,month,day都当成形参就会变成形参year 形参year这样我们的成员变量就没有改变还是默认值0无法达到我们的目的。而this关键字就是将左边同名的year,month,day都标明是成员变量这样就可以解决同名导致的问题。4.2 this是什么this引用指向当前对象(成员方法运行时调用该成员方法的对象)在成员方法中所有成员变量的操作都是通过该引用去访问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。此时通过指定this就能正确解决上述的2个问题了。这里之所以可以起作用关键点在于this代表的是当前对象的引用当前对象就是指哪个对象调用setDay2方法谁就是this引用4.3 this引用的特性1. this的类型对应类类型引用即哪个对象调用就是哪个对象的引用类型2. this只能在成员方法中使用3. 在成员方法非静态成员方法中this只能引用当前对象不能再引用其他对象4. this是“成员方法”第⼀个隐藏的参数编译器会自动传递在成员方法执行时编译器会负责将调用成员方法对象的引用传递给该成员方法this负责来接收5. this的使用总结this.成员变量 //访问对象的成员变量 this.成员方法 //访问对象的成员方法事实上我们也可以通过this来访问构造方法那么什么是构造方法呢5. 对象的构造及初始化5.1 如何初始化对象中的成员变量通过前面知识点的学习知道在Java方法内部定义一个局部变量时必须要初始化否则会编译失败。public static void main(String[] args) { int a; System.out.println(a); } // Error:(26, 28) java: 可能尚未初始化变量a要让上述代码通过编译非常简单只需在正式使用a之前给a设置一个初始值即可。如果是对象public static void main(String[] args) { Date d new Date(); d.printDate(); d.setDate(2021,6,9); d.printDate(); } // 代码可以正常通过编译需要调用之前写的SetDate方法才可以将具体的日期设置到对象中。通过上述例子发现两个问题1. 每次对象创建好后调用SetDate方法设置具体日期比较麻烦那对象该如何初始化2. 局部变量必须要初始化才能使用为什么字段声明之后没有给值依然可以使用5.2 默认初始化public class Date { public int year; public int month; public int day; public static void main(String[] args) { // 此处a没有初始化编译时报错 // Error:(24, 28) java: 可能尚未初始化变量a // int a; // System.out.println(a); Date d new Date(); System.out.println(d.year); System.out.println(d.month); System.out.println(d.day); } }对于成员变量来说如果没有进行初始化会有一个对应的默认值默认值遵循如下规则5.3 就地初始化在声明成员变量时就直接给出了初始值。public class Date { public int year 1900; public int month 1; public int day 1; public Date(){ } public Date(int year, int month, int day) { } public static void main(String[] args) { Date d1 new Date(2021,6,9); Date d2 new Date(); } }5.4 构造方法初始化5.4.1 构造方法概念构造方法(也称为构造器)是⼀个特殊的成员方法名字必须与类名相同在创建对象时由编译器自动调用并且在整个对象的生命周期内只调用一次。5.4.2 构造方法注意事项1. 名字必须与类名相同2. 没有返回值类型设置为void也不行3. 创建对象时由编译器自动调用并且在对象的生命周期内只调用一次(相当于人的出生每个人只能出生一次)4. 构造方法可以重载用户根据自己的需求提供不同参数的构造方法)public class Date { public int year; public int month; public int day; // ⽆参构造⽅法 public Date(){ this.year 1900; this.month 1; this.day 1; } // 带有三个参数的构造⽅法 public Date(int year, int month, int day) { this.year year; this.month month; this.day day; } public void printDate(){ System.out.println(year - month - day); } public static void main(String[] args) { Date d new Date(); d.printDate(); }上述两个构造方法名字相同参数列表不同因此构成了方法重载。5. 如果用户没有显式定义编译器会生成⼀份默认的构造方法生成的默认构造方法⼀定是无参的。public class Date { public int year; public int month; public int day; public void printDate(){ System.out.println(year - month - day); } public static void main(String[] args) { Date d new Date(); d.printDate(); } }上述Date类中没有定义任何构造方法编译器会默认生成⼀个不带参数的构造方法。6. 构造方法中可以通过this调用其他构造方法来简化代码public class Date { public int year; public int month; public int day; public Date(){ this(1900, 1, 1); } // 带有三个参数的构造⽅法 public Date(int year, int month, int day) { this.year year; this.month month; this.day day; } }• this(...)必须是构造方法中第⼀条语句• 不能形成环的调用public Date(){ this(1900,1,1); } public Date(int year, int month, int day) { this(); }7. 绝大多数情况下使用public来修饰特殊场景下会被private修饰(后序讲单例模式时会遇到)6. 对象的打印如果我们直接打印对象的引用此时输出的结果为类路径名对象的hashcode值。public class Person { String name; String gender; int age; public Person(String name, String gender, int age) { this.name name; this.gender gender; this.age age; } public static void main(String[] args) { Person person new Person(Jim,男, 18); System.out.println(person); } }如果想要默认打印对象中的属性该如何处理呢答案重写toString方法即可public class Person { String name; String gender; int age; public Person(String name, String gender, int age) { this.name name; this.gender gender; this.age age; } Override public String toString() { return [ name , gender , age ]; } public static void main(String[] args) { Person person new Person(Jim,男, 18); System.out.println(person); } } // 输出结果[Jim,男,18]

相关新闻

Arduino-LMIC区域配置指南:EU868/US915/AU915等频段设置

Arduino-LMIC区域配置指南:EU868/US915/AU915等频段设置

Arduino-LMIC区域配置指南:EU868/US915/AU915等频段设置 【免费下载链接】arduino-lmic LoraWAN-MAC-in-C library, adapted to run under the Arduino environment 项目地址: https://gitcode.com/gh_mirrors/ard/arduino-lmic Arduino-LMIC是一款强大的LoR…

2026/8/7 19:15:09 阅读更多 →
SAE vs SAELens:为什么动态计算激活比缓存更适合大规模模型?

SAE vs SAELens:为什么动态计算激活比缓存更适合大规模模型?

SAE vs SAELens:为什么动态计算激活比缓存更适合大规模模型? 【免费下载链接】sae Sparsify transformers with SAEs and transcoders 项目地址: https://gitcode.com/gh_mirrors/sae/sae SAE(稀疏自动编码器)是提升大规模…

2026/8/7 19:15:09 阅读更多 →
cuPCL核心功能解析:ICP、NDT、滤波与分割的CUDA实现原理

cuPCL核心功能解析:ICP、NDT、滤波与分割的CUDA实现原理

cuPCL核心功能解析:ICP、NDT、滤波与分割的CUDA实现原理 【免费下载链接】cuPCL A project demonstrating how to use the libs of cuPCL. 项目地址: https://gitcode.com/gh_mirrors/cu/cuPCL cuPCL是一个基于CUDA加速的点云处理库,通过GPU并行计…

2026/8/7 19:14:09 阅读更多 →

最新新闻

CLIP-ViT-L-14-laion2B-s32B-b82K完全解析:从零开始掌握多模态AI模型的终极指南

CLIP-ViT-L-14-laion2B-s32B-b82K完全解析:从零开始掌握多模态AI模型的终极指南

CLIP-ViT-L-14-laion2B-s32B-b82K完全解析:从零开始掌握多模态AI模型的终极指南 【免费下载链接】CLIP-ViT-L-14-laion2B-s32B-b82K 项目地址: https://ai.gitcode.com/hf_mirrors/laion/CLIP-ViT-L-14-laion2B-s32B-b82K CLIP-ViT-L-14-laion2B-s32B-b82K是…

2026/8/7 22:02:12 阅读更多 →
快速读懂MCP与A2A架构,抢占企业数字化新风口

快速读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/7 22:02:12 阅读更多 →
进阶练习:基于分割与轮廓的物体测量系统

进阶练习:基于分割与轮廓的物体测量系统

进阶练习:基于分割与轮廓的物体测量系统📚 本章学习目标:深入理解基于分割与轮廓的物体测量系统的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《计算机视觉教程》图像分割与形态学篇&a…

2026/8/7 22:02:12 阅读更多 →
深度剖析md2notion架构:NotionPyRenderer如何实现Markdown解析?

深度剖析md2notion架构:NotionPyRenderer如何实现Markdown解析?

深度剖析md2notion架构:NotionPyRenderer如何实现Markdown解析? 【免费下载链接】md2notion A better Notion.so Markdown importer 项目地址: https://gitcode.com/gh_mirrors/md/md2notion md2notion是一款强大的Notion.so Markdown导入工具&am…

2026/8/7 22:02:12 阅读更多 →
3步搭建你的私人麻将AI教练:Akagi雀魂辅助工具完全指南

3步搭建你的私人麻将AI教练:Akagi雀魂辅助工具完全指南

3步搭建你的私人麻将AI教练:Akagi雀魂辅助工具完全指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amat…

2026/8/7 22:02:12 阅读更多 →
phpLDAPadmin完全指南:从安装到精通的Web LDAP管理工具使用教程

phpLDAPadmin完全指南:从安装到精通的Web LDAP管理工具使用教程

phpLDAPadmin完全指南:从安装到精通的Web LDAP管理工具使用教程 【免费下载链接】phpLDAPadmin phpLDAPadmin - Web based LDAP administration tool 项目地址: https://gitcode.com/gh_mirrors/ph/phpLDAPadmin phpLDAPadmin(简称PLA&#xff09…

2026/8/7 22:01:12 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →