文章目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e88f8c3a3d5d1e1dd0360de2a98aa4d9.png)
阅读文本大概需要 6.66 分钟。
前言
大家好,这是首发于公众号「蜗牛永动机」的趣谈 Java 系列教程。学习一门语言最好的办法,就是教会别人。在这个公众号,我会从最基础的教程开始写起,一方面是为了更好地复习巩固 Java 基础,另一方面也是慢慢进阶的过程。喜欢的朋友请点关注,每天一小步,一年后就是一大步。废话不多说,开始今天的文章。
一、前世今生
学习一门语言之前,最好的方式是先了解这门语言的前世今生和用途,它有什么特点。知己知彼,方能学好编程。
今天这篇文章没有一上来就直接从 Java 的基础语法开始,而是先介绍 Java 的前世今生和最核心的部分,即面向对象编程思想。这对我们后续的学习会有很大帮助,而不是一上来就先一顿猛如虎地骚操作,不管三七二十一直接三下五除二从基础语法搞起,都不知道这门语言是干嘛的,完全就是在盲目地学,很容易放弃。
1、Java 是什么
Java 是一门解释型、跨平台、面向对象的编程语言,是目前最流行的编程语言之一,1996 年由 Sun 公司发布第一个版本,也即 Java 1.0。截止目前 Java 迭代的版本如下:
2019 最新编程语言排名
这是比较权威的编程语言排行网站 TIOBE 上的最新排行,从上图中我们可以看到,排行前十的编程语言中,Java 依旧宝刀未老,仍然稳坐铁王座。
2、Java 有什么特点
3、Java 的应用
早期 Java 在桌面应用的开发是很广泛的,现在应用最广泛的主要还是在 Web 开发和大数据开发上,在 Android 方面的应用越来饱和,新人不建议再入 Android 的坑。
二、面向对象 VS 面向过程
在接触面向对象之前,我们首先回想下第一次接触 C 语言的情景,会发现在学习 C 语言的时候,在设计一个计算机的程序时,我们会根据解决问题的步骤,将程序组织为一系列的线性代码或函数,然后依次调用访问即可,这种编程的思想本质上就是面向过程的思想。
但是,面向对象的思想则有着本质的不同,思考方式不再是第一步先做什么,第二步再做什么。面向对象的思想要求我们面对一个问题时,从以下角度来思考问题:
- 这个问题中可以抽象出哪些类和对象;
- 这些类和对象具有哪些属性和方法;
- 这些类之间存在哪些关系。
三、面向对象编程思想
面向对象编程思想的关键是抽象。它将现实世界中的事物理解为由属性和对这些属性实施的行为的统一体。这句话怎么理解呢?也就是说面向对象编程的思想主要如下:
- 从现实世界中客观存在的事物(也即对象)出发来构造软件系统
- 运用人类的自然思维方式来认识问题-如抽象、分类、继承、多态等
- 根据这些事物的本质特点来抽象表示为系统中的类
那么,我们要如何抽象出一个类呢?主要有两个方面,一个是它的静态属性,一个则是它的动态属性。分别对应对象中的属性(或成员变量)和方法。
举例
假设现在有一个录音机类,那么我们该如何抽象出这个录音机类呢?一样的道理,还是从两方面入手:静态属性和动态属性。首先,录音机有哪些静态属性呢?有运转速度、运转方向和颜色等。有哪些动态属性(方法)呢?录音机可以播放,可以录音,同时也就可以快进或者快退,这些都是它的方法。
对于类来说,它描述了具有相同特性(属性)和行为(方法)的对象集合,是同种对象的集合与抽象。但是具体到某一个对象来说,它有没有相关的属性呢?当然是有的,比如从录音机这个类中实例化出来两个录音机:录音机 A 和录音机 B,它们都有运转速度、运转方向和颜色等属性,只是相应的值不一样。这样,根据这些属性的不同我们就可以区分出录音机 A 和 录音机 B。所以,可以根据属性来区分不同的对象。
那么,是不是根据方法也可以区分不同的对象呢?答案是否定的。俗话说,甭管黑猫白猫,捉到老鼠就是好猫。现在问题来了,猫是一个类,现在有一只黑猫和白猫,假设定义一个方法叫捉老鼠(),而不管是黑猫也好,白猫也好,都会捉老鼠。那么,我们要怎么根据捉老鼠这个方法来区分黑猫和白猫呢?很显然区分不了。但如果按颜色分,那就是一目了然的事儿。
总结
1、类是一类事物(同种对象)的集合与抽象,类中定义了这一类对象所具有的静态属性和动态属性;
2、对象可以看成这个类的一个具体实例,也就是一个对象。换句话说,实例和对象指的是一回事;
3、根据类的属性可以区分这个类的不同对象,根据方法则不能区分。
四、面向对象的基本特征
面向对象主要有三个基本特征:封装、继承和多态。通常我们会认为抽象也是面向对象的基本特征之一,但其实抽象只是面向对象的重要部分,因为所有的编程语言都需要抽象。
封装: 将操作(方法)和操作所涉及的数据(成员变量)捆绑在一起,将对象的实现细节隐藏起来,然后通过公用的方法来暴露对象的功能。
继承: 一个新类继承原有类的基本特征,直接获得原有类的属性和方法。其中,新类也叫子类或派生类,原有类则叫父类或基类。
多态: 也叫动态绑定、后期绑定或运行时绑定。多态主要指同一名称的方法可以有多种不同的功能或相同的接口可以有多种实现方法。
五、Java 与面向对象
1、一切皆对象,对象是 Java 程序的核心;
2、静态属性(成员变量) + 动态属性(方法)= 类定义,也就是说对象可以看成静态属性和动态属性的封装体;
3、每个对象都拥有其类型。类是用来创建同一类型的对象的模板,在一个类中定义了该类所具有的成员变量和方法;
从前面知识点的学习中我们知道了在 Java 中类和对象是分不开的。要向一个对象「发送消息」,我们得先定义一个类,然后才有对象。紧接着我们可以在类中定义这个类的成员变量和方法,当向这个对象发送请求(消息)时,与之关联的方法就会被调用。
那么在 Java 中要怎么抽象出一个类并写成代码呢?无非就是将一类事物抽象成一个类,然后在这个类中写好它的成员变量和方法。
比如,现在我们要封装一个篮球,抽象出篮球这个类,在 Java 中要怎么写代码呢?代码如下:
/**
* Java 里面将一类事物封装成一个类,首先得写 class 来定义这个类,名字可以
* 自取,遵循驼峰原则,但类的首字母要大写。这里命名为 Basketball
*/
public class Basketball {
/**
* 定义类的静态属性(成员变量)。比如这里,篮球这个类的静态属性有颜色、
* 形状和重量等。定义的时候需要指明属性的类型,比如重量这个属性,类型
* 为 float
*/
String color; // 定义属性:篮球的颜色
String shape; // 定义颜色:篮球的形状
float weight; // 定义属性:篮球的重量
/**
* 上面定义了篮球这个类的静态属性,接下来定义它的方法。比如
* 打气这个方法,定义为 pump()
*/
void pump() {
System.out.println("篮球已经充满气了!");
}
public static void main(String[] args) {
Basketball b = new Basketball(); // 用 new 关键字创建一个篮球
b.pump(); // 让这个篮球去调用打气的方法,给篮球打气
}
}
六、为什么要使用面向对象编程
目的: 提高软件开发的可重用性、可维护性和可扩展性
传统的软件开发主要是面向过程的,这意味着方法和属性一般是分开的,当软件系统比较大的时候想要复用相应的模块就很麻烦,并且复用的层次基本也仅限于方法层面。而面向对象则不同,它将对象的方法和属性封装在一个类中,这让我们可以直接复用方法和属性的统一整体。换句话说,我们可以直接对一个类进行复用,这大大提高了软件开发的可重用性。同时这意味着我们的代码更易于维护和扩展。
写在最后
至此「趣谈 Java 之——与对象的初次约会」篇就已结束,接下来给自己三分钟的时间回想一下,今天这篇都学习到了什么。
如果你按我说的去做,你会发现你只能回忆起一些内容,很难把全部的知识都记住。这是很正常的情况,所以需要温故而知新。最后,我把这篇文章的知识点整理成思维导图送给大家。
推荐阅读:
欢迎关注我的公众号「蜗牛永动机」,回复 1024 免费获取 5G 编程学习资源~