趣谈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

相关文章

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

Java中ArrayList与顺序表示例详解

《Java中ArrayList与顺序表示例详解》顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构,:本文主要介绍Java中ArrayList与... 目录前言一、Java集合框架核心接口与分类ArrayList二、顺序表数据结构中的顺序表三、常用代码手动

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位