《Java从入门到失业》第四章:类和对象(4.1):初识类和对象
4类和对象
在第一章曾经简单介绍过,在面向对象的世界里,一切事物皆对象,当解决一个问题的时候,我们先会考虑这个问题会涉及到哪些事物,然后把事物抽象成类,当时还画了一张图如下:

从本章开始,我们一点一点来剖析类的世界,带领大家一起进入类的海洋。
4.1初识类和对象
4.1.1什么是类
其实在现实世界当中,类并不陌生。比如我们把自己称为人,把花花草草称为植物,把用的手机电脑称为电器,把坐的汽车地铁称为交通工具等等。这些称呼其实就是在把事物进行分类。有的时候,还会根据特定的需要,把这些事物往下进行细化或往上进行抽象,例如把手机称为手持设备(手持设备属于电器的一类),把人和植物统称为生物等等。图示如下:

我们之所以这么分类,是因为同一类事物具有一些相同的属性和行为。比如手机有型号、颜色、屏幕尺寸等属性,可以打电话、播放视频、玩游戏等功能。
程序就是用来解决现实世界的问题的,程序语言经历了从低级语言到高级语言的进化,为了更加贴近人的思维方式,因此高级语言也把问题中涉及到的具有相同属性和行为的事物抽象成类。Java作为一种高级语言,当然也不例外。
在Java中,我们所有的代码都是位于某一个类中的。标准的类库中提供了上千个类,可以用于各种各样的功能。在程序中,我们把事物抽象成类的过程,可以称之为封装。说白了,封装就是把属性和行为包装到一个类中,对使用者隐藏属性存储的细节和行为实现的细节,只提供使用的API文档。例如我们买一部手机,会提供给我们一份说明书,这个说明书就是API文档,我们照着说明书就会使用这部手机了。
类也可以向下细化成更小的类,这个过程称为继承。其实,在Java中,所有的类都直接或间接继承自一个超级类:Object。关于继承,我们后面还会详细探讨。
通过上面的分析,我们知道,类具有3个主要要素:名字、属性、行为。在Java中,我们把行为称之为方法。例如手机类:

4.1.2什么是对象
你们中估计好多都没有搞对象吧?嘿嘿。我现在带你到Java中来搞。前面提到了手机类,但是这个分类在现实世界中怎么体现呢?例如笔者有一部荣耀V20,蓝色的外壳,6.1寸的屏幕。我媳妇有一部红色iphone11,也是6.1寸屏幕。这2部手机是实实在在存在的、看得见、摸得着的具体事物,它们就是手机类的具体体现,我们称之为手机类的对象。
类可以理解为构造对象的模板,是一种抽象定义。对象是类具体化后实实在在存在的事物。在程序中,通过类,可以创建出具体的对象,这个过程叫做构建类的实例,对象既然是类的实例,因此它会把类的3个主要要素具体化:
- 对象的状态:类的属性在对象上的具体表现
- 对象的行为:类的方法在对象上的具体表现
- 对象的标识:区分同一个类的不同的实例
我们用图描述一下:

从上图我们可以看出:
- 每个对象实例的属性值各不相同,称之为对象的状态,因为类具有封装性,因此状态一般不会自发的改变,大部分都会通过方法调用后,才会发生改变。
- 同一个类的不同对象实例,他们具有相同的行为,这些行为是类的方法所定义的。但是对象的状态会影响行为的结果,例如手机的硬件可以看成是手机的属性,因为iphone11和v20的硬件具体参数不同,因此虽然有相同的行为,但是行为的结果可能不一样。例如v20只能低画质吃鸡,而iphone11可以高画质吃鸡。
- 不同的对象还需要加以区分,因此都会有一个唯一的身份识别码(标识),例如我们的手机都会有一串看不懂的型号标识,当发生保修的时候一般就会用到。在程序中,这个标识会随着对象的实例化而自动分配。
通过上面的讨论,我们搞清楚了什么是类,什么是对象,类和对象的关系。那么我们如何使用一个类呢?我们知道,我们想要看电视,首先得去买一台电视机(除非你能自己造一台)。同理,一般我们想要解决问题,先从JDK提供的类库里找,看看有没有满足我们需求的类,如果没有,我们再自己创建(当然,现在Java已经非常火爆,开源的类库琳琅满目,只有你想不到的,没有你找不到的)。接下来的小节我们会通过一个非常常用的类来学习如何使用一个类。
《Java从入门到失业》第四章:类和对象(4.1):初识类和对象的更多相关文章
- 《Java从入门到失业》第一章:计算机基础知识(三):程序语言简介
1.3程序语言简介 我们经常会听到一些名词:低级语言.高级语言.编译型.解释型.面向过程.面向对象等.这些到底是啥意思呢?在正式进入Java世界前,笔者也尝试简单的聊一聊这块东西. 1.3.1低级语言 ...
- 《Java从入门到失业》第二章:Java环境(四):IDE集成环境
2.4IDE集成环境 在掌握了编写.编译和运行Java程序的基本步骤以后,你肯定就在想,这太麻烦了,有没有更好的工具?当然有了,那就是IDE.IDE就是专业的集成开发环境(Integrated Dev ...
- 《Java从入门到失业》第一章:计算机基础知识(一):二进制和十六进制
0 前言 最近7年来的高强度工作和不规律的饮食作息,压得我有些喘不过气,身体也陆续报警.2018年下半年的一场病,让我意识到了这个问题的严重性,于是开始强制自己有规律饮食和作息,并辅以健身锻炼,不到2 ...
- 《Java从入门到失业》第二章:Java环境(一):Java SE安装
从这一章开始,终于我们可以开始正式进入Java世界了.前面我们提到过,Java分三个版本,我们这里只讨论Java SE. 2.1Java SE安装 所谓工欲善其事,必先利其器.第一步,我们当然是要下载 ...
- 《Java从入门到失业》第二章:Java环境(三):Java命令行工具
2.3Java命令行工具 2.3.1编译运行 到了这里,是不是开始膨胀了,想写一段代码来秀一下?好吧,满足你!国际惯例,我们写一段HelloWorld.我们在某个目录下记事本,编写一段代码如下: 保存 ...
- 《Java从入门到失业》第二章:Java环境(二):JDK、JRE、JVM
2.2JDK.JRE.JVM 在JDK的安装目录中,我们发现有一个目录jre(其实如果是下一步下一步安装的,在和JDK安装目录同级目录下,还会有一个jre目录).初学Java的同学,有时候搞不清楚这3 ...
- 《Java从入门到失业》第一章:计算机基础知识(二):计算机组成及基本原理
1.2计算机组成及基本原理 1.2.1硬件组成 这里说的计算机主要指微型计算机,俗称电脑.一般我们见到的有台式机.笔记本等,另外智能手机.平板也算.有了一台计算机,我们就能做很多事情了,比如我在写这篇 ...
- 《Java从入门到失业》第四章:类和对象(4.5):包
4.5包 前面我们已经听过包(package)这个概念了,比如String类在java.lang包下,Arrays类在java.util包下.那么为什么要引入包的概念呢?我们思考一个问题:java类库 ...
- #Python编程从入门到实践#第四章笔记
#Python编程从入门到实践#第四章笔记 操作列表 1.遍历列表 使用for循环,遍历values列表 for value in values: print(value) 2.数字列表 使 ...
- ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一 ...
随机推荐
- vs2017引用vue组件中文乱码
原因:文件默认编码格式为ASNI编码,需要改成UTF-8编码 解决方案: ①用记事本打开component.js文件 ②另存文件,修改编码为UTF-8编码,保存
- 虚拟机解释器与bytecode对接
心头一直有个疑问,jvm虚拟是如何对接class中的字节码的?或者说在未进入 JIT优化阶段时,解释器是如何对接的? 大概阐述 hotspot通过C++代码在堆上申请一块空间,向里面填充一组指令,然后 ...
- 如何解决Mybatis 日期查询时后面带.0
关于如何解决Mybatis 日期查询时后面带.0 MySQL数据库: 直接在MySQL查询语句中解决: SELECT T.ID, T.USERNAME, DATE_FORMAT(t.birthda ...
- 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇)
系列文章 手牵手,使用uni-app从零开发一款视频小程序 (系列上 准备工作篇) 手牵手,使用uni-app从零开发一款视频小程序 (系列下 开发实战篇) 前言 好久不见,很久没更新博客了,前段时间 ...
- Jmeter 常用函数(24)- 详解 __digest
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 在特定的哈希算法中返回加密的值,并带有可 ...
- 2020.5.24 第四篇 Scrum冲刺博客
Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...
- Python九九乘法表(正序和逆序)
正序: for i in range(1,10): for j in range(1,i+1): print(str(i)+"*"+str(j)+"="+str ...
- pytest「conftest、pytest参数化、重运行、出测试报告」
文章总览图 一.conftest问题整理: 1.这个conftest.py分路径吗?如果在TestCases下建这个包可以直接用吗? TestCases这里有ModeA和ModeB,想在ModeA或M ...
- JMH-大厂是如何使用JMH进行Java代码性能测试的?必须掌握!
Java 性能测试难题 现在的 JVM 已经越来越为智能,它可以在编译阶段.加载阶段.运行阶段对代码进行优化.比如你写了一段不怎么聪明的代码,到了 JVM 这里,它发现几处可以优化的地方,就顺手帮你优 ...
- 区块链入门到实战(31)之Solidity – 第一个程序
为简单起见,我们使用在线Solidity开发工具Remix IDE编译和运行Solidity程序. 第1步 – 在File explorers选项卡下,新建一个test1.sol文件,代码如下: 示例 ...