趣谈Java之——与对象的初次约会

2023-11-30 11:40
文章标签 java 对象 约会 初次 趣谈

本文主要是介绍趣谈Java之——与对象的初次约会,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 前言
    • 一、前世今生
      • 1、Java 是什么
      • 2、Java 有什么特点
      • 3、Java 的应用
    • 二、面向对象 VS 面向过程
    • 三、面向对象编程思想
    • 四、面向对象的基本特征
    • 五、Java 与面向对象
    • 六、为什么要使用面向对象编程
    • 写在最后


在这里插入图片描述

阅读文本大概需要 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 之——与对象的初次约会」篇就已结束,接下来给自己三分钟的时间回想一下,今天这篇都学习到了什么。

如果你按我说的去做,你会发现你只能回忆起一些内容,很难把全部的知识都记住。这是很正常的情况,所以需要温故而知新。最后,我把这篇文章的知识点整理成思维导图送给大家。

在这里插入图片描述


推荐阅读:

全网最全的编程学习资源,PDF 电子书大合集

欢迎关注我的公众号「蜗牛永动机」,回复 1024 免费获取 5G 编程学习资源~

这篇关于趣谈Java之——与对象的初次约会的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/436894

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H