《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系列软件的体系结构有了一 ...
随机推荐
- 在 Go 语言中,我为什么使用接口
强调一下是我个人的见解以及接口在 Go 语言中的意义. 如果您写代码已经有了一段时间,我可能不需要过多解释接口所带来的好处,但是在深入探讨 Go 语言中的接口前,我想花一两分钟先来简单介绍一下接口. ...
- Java并发编程(07):Fork/Join框架机制详解
本文源码:GitHub·点这里 || GitEE·点这里 一.Fork/Join框架 Java提供Fork/Join框架用于并行执行任务,核心的思想就是将一个大任务切分成多个小任务,然后汇总每个小任务 ...
- Disruptor极速队列
参考:http://www.cnblogs.com/haiq/p/4112689.html Disruptor 是线程内通信框架,用于线程里共享数据.LMAX 创建Disruptor作为可靠消息架构的 ...
- String、StringBuilder、StringBuffer三者的区别
StringBuffer.StringBuilder和String都可以用来代表字符串.String类是不可变类,任何对String的改变都会引发新的String对象的生成:StringBuffer. ...
- Unix I/O
Unix I/O 打开文件 一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备.内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件.内核记录有关这个打开 ...
- 开发APP遇到的问题
1.代码尽量复用 2.调用高德地图,直辖市等,省字段一定有值,市可能为空(pro:'北京市',city:[]) 3.支付密码不用组件 <template> <view> < ...
- java自动拆装箱
介绍 Java 5增加了自动装箱与自动拆箱机制,方便基本类型与包装类型的相互转换操作.(关于基本类型与包装类型之前有记录过https://www.cnblogs.com/xiuzhublog/p/12 ...
- 畅购商城(九):Spring Security Oauth2
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...
- IDEA_Shelve代码搁置与恢复
日常开发中,经常会遇到在当前分支开发到一半,但是需要Checkout上个版本解决bug或调查问题的情况.这个时候,我们是将代码提到Push远程?还是直接Rollback? 最理想的做法,就是将当前的开 ...
- docker 启动容器失败 id already in use
问题:id already in use 解决:/etc/docker/daemon.json {"shutdown-timeout": 60}