当前位置: 首页 > news >正文

Java基础知识 | 常见面试题(中):面向对象基础

撰写成一问一答的形式,每次回答都默写,对比参考答案后,再默写出更恰当的答案。

 相关内容

Java基础知识 | 常见面试题(上):基础概念和常识

Java基础知识 | 常见面试题(上):基本语法

Java基础知识 | 常见面试题(上):基本数据类型

自测篇

1.1 面向对象和面向过程的区别
1.2 创建一个对象用什么运算符?对象实体与对象引用有何不同?
1.3 对象的相等和引用相等的区别
1.4 类的构造方法的作用是什么?
1.5 如果一个类没有声明构造方法,该程序能正确执行吗?
1.6 构造方法有哪些特点?是否可被 override?
1.7 面向对象三大特征
1.8 接口和抽象类有什么共同点和区别?
1.9 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

答案篇

1.面向对象和面向过程的区别

两者解决问题的方式不同:

面向对象是根据问题先抽象出涉及到的对象,再基于对象去分配任务去实现解决问题。

  • 将事务封装到对象中实现,之后再增加事务只需要创建对象即可。

面向过程则是将问题拆解成几个子问题再依次实现。

举个生活中的例子,餐馆的场景:

面向对象的方式则是创建厨师、服务员和顾客三个对象则能够实现这个场景;

面向过程则是创建顾客进门→服务员拿菜单介绍→顾客点菜下单→厨师做菜→服务员上菜→顾客结账

面向过程则是能够流程化,而面向对象更符合我们的思维思考;

2.创建一个对象用什么运算符?对象实体与对象引用有何不同?

创建对象使用new运算符,创建新的对象实例,并将新的对象引用指向该实例。

对象引用是什么?

  • 对象引用即指向堆内存中实际对象的地址,存储在栈当中。

  • 对象实体即对象的信息和内容,存储在堆当中。

  • 对象实体和对象引用像是绳子与气球,一个对象引用只能指向一个对象实体,而可以有很多个对象引用指向同一个对象实体。

3.对象的相等和引用相等的区别

引用相同通过查看地址是否相同,而对象相等判断的是其内存存放的值和属性是否相同。

4.类的构造方法的作用是什么?

类的构造方法便于在调用对象时直接赋值初始化,其中无参构造器能够保证即使无赋值初始化也不会报错;

5.如果一个类没有声明构造方法,该程序能正确执行吗?

能正常运行,因为在Java机制中当没有创建构造器时,其会默认创建无参构造器;

若创建构造器后,则必须创建无参构造成;

因为在创建引用类型时,new对象后加上的()调用的就是无参构造器,不创建很容易报错。

6.构造方法有哪些特点?是否可被 override?

构造方法方法名与类相同,无返回类型和返回值;

能够撰写参数列表,重载:创建多个构造方法必须参数列表不同,不能被override覆盖/重写;

但能够直接调用在创建对象时自动执行相应构造器方法,无需调用;

7.面向对象三大特征

面向对象三大特征为封装、继承和多态;

封装

  • 能够将常用的方法构建好后便于下次使用时直接调用相应的包即可;

  • 封装相当于黑盒,但同时必须提供相应的访问方法。

    • 每个类相对于一个对象,将该对象需要解决的功能实现封装,并且提供外部相应访问的方法。

    • 防止外部直接方法内部信息,同时必须提供给外部能够访问的途径,因为类的创建就是为了便于使用。

    • 就像使用电脑,我们无需知道里面的集成电路如何构建,只需要会使用键盘和鼠标即可操作计算机;

继承:代码复用性和可维护性

  • 在已经封装好的类的实现功能上再完善or增加相应的功能。

  • 但需要注意的是继承的是父类全部的方法;

  • 注意事项

    • 子类只是拥有父类的方法,即对于父类的私有方法只能访问而不能再其基础上修改。

    • 子类能够继承父类方法并拓展自己方法;

    • 子类可以用自己的方式实现父类的方法(不懂后期待补)。

多态:

  • 同种方法根据调用的对象不同而产生不同的结果,使用父类创建对象,使用父类的引用来引用子类的对象。

  • 对象类型和引用类型间必须是继承关系;

  • 只能够调用“父类和子类”都存在的方法;在运行时才能确定调用的是哪个类的方法;

  • 当子类覆盖父类方法时,则调用的是指向子类对象的方法,若该子类未覆盖父类方法,则调用的是父类的方法

8.接口和抽象类有什么共同点和区别?

接口出现的目的是为了定义规范,必须实现某些功能才能被认为符合某类范式。

抽象类则是为了将具象化事物抽象出来,便于按照指定特征去实现,就像动物抽象类,狗和猫都能实现其基础功能,并且在该基础上实现其各自特点,相当于是参考模板。

接口和抽象类的共同点:

  • 继承子类必须实现其所有方法;

  • 且接口和抽象类都不能实例化;

接口

抽象类

子类必须实现

子类必须实现

继承机制不同

能够多接口

只能继承一个抽象类

对类进行约束,实现相应行为

目的是复用,关注所属关系

语法不同

Inference

Abstract

修饰符要求不同

public、static或final修饰

默认为default

不能被修改,且必须有初始值

可被重新定义or重新赋值。

9.深拷贝和浅拷贝区别了解吗?什么是引用拷贝?

浅拷贝只是创建新的对象引用到相同对象实体中,而深拷贝则是将对象实体(信息和内容)和对象引用都复制一遍

引用拷贝则是直接引用对象,与原对象共用对象引用和对象实体;

  • 浅拷贝的对象与原对象不同,但调用的内容是相同共用的;

问题和理解大部分来源为Guide哥的Java面试指南,有需要的可自行检索加入其星球获得。 

相关文章:

Java基础知识 | 常见面试题(中):面向对象基础

撰写成一问一答的形式,每次回答都默写,对比参考答案后,再默写出更恰当的答案。 相关内容 Java基础知识 | 常见面试题(上):基础概念和常识 Java基础知识 | 常见面试题(上)&#xff1a…...

勒索软件正在从 Windows 转向 Linux

听说勒索软件正在从 Windows 转向 Linux了勒索软件正在从 Windows 转向 Linux 最近几周,黑客们一直在对 Linux 企业网络部署 IceFire 勒索软件,这是一个值得注意的转变,因为它曾经是一个只针对 Windows 的恶意软件。与 Windows 相比&#xf…...

信息系统项目管理师 第11章 项目成本管理

1.管理基础 1.重要性和意义 项目管理主要受范围、时间、成本、质量的约束,项目成本管理就是要确保在批准的预算内完成项目。 如果项目建设的实际成本远远超出批准的投资预算,就很容易造成成本失控。 1.对工程项目认识不足。 2.组织制度不健全。 3.方法问题 4.技术的制约 5.需…...

XML 简介

文章目录一、XML 简介二、XML 用途总结一、XML 简介 XML 被设计用来传输和存储数据。 HTML 被设计用来显示数据。 XML 指可扩展标记语言(eXtensible Markup Language)。 可扩展标记语言(英语:Extensible Markup Language&#xf…...

ERP:华为杀入,金蝶们打颤?

配图来自Canva可画 近期,华为官方透露将在4月份推出自研MetaERP管理系统,引来不少媒体和业内人士的围观,紧接着关于华为“进军ERP市场”的解读更是不胫而走,所谓一石激起千层浪,此说法一出,直接导致了金蝶…...

Linux——总复习1

1.要注意自己处于当前那个目录位置。 2.将file1的前五行/后三行重定向、附加到file2【输出重定向】 head -5 file1 > file2 tail -3 file1 >> file2 3.ls与cat区别 ls:列出目录的目录内容,未指定目录,则列出当前工作目录的内容 -l:查…...

控制SQL*PLUS的环境和数据字典简介

可以通过使用SET命令来设置SQL*PLUS的环境变量,从而达到控制SQL*PLUS 环境的目的。 SET命令的格式如下: SET 环境变量 变量的值 可以通过使用SHOW命令来显示SQL*PLUS环境变量的配置。SHOW 命令的格式如下: SHOW 环境变量|ALL 下面用一个…...

Chapter11.3:MATLAB_SIMULINK在离散系统中的应用

该系列博客主要讲述Matlab软件在自动控制方面的应用,如无自动控制理论基础,请先学习自动控制系列博文,该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接:https://blog.csdn.net/qq_39032096/category_10287468…...

过滤器Filter

什么是Filter? Filter表示过滤器,是JavaWeb三大组件(Servlet、FIlter、Listener)之一。过滤器可以把对资源的请求拦截下来,总而实现一些特殊的功能 使用过滤器后,要想访问web服务器上的资源,必须…...

MySQL数据同步ES的常用思路和方法

文章目录 1.同步双写2.异步双写3.定时任务4.数据订阅大家应该都在各种电商网站检索过商品,检索商品一般都是通过什么实现呢?搜索引擎Elasticsearch。 那么问题来了,商品上架,数据一般写入到MySQL的数据库中,那么用于检索的数据又是怎么同步到Elasticsearch的呢? 1.同步双…...

spring源码之扫描前设置

扫描前设置 &#x1f6f9;源码源码说明总结启动一个springboot项目源码 org.springframework.context.annotation.ComponentScanAnnotationParser#parse public Set<BeanDefinitionHolder> parse(AnnotationAttributes componentScan, String declaringClass) {// 创建C…...

C++ 98/03 应该学习哪些知识19

迭代器、空间配置器理解 在 C 中&#xff0c;迭代器是一种可以用来遍历容器中的元素的对象。它们提供了一个类似于指针的接口&#xff0c;允许我们访问容器中的元素&#xff0c;而不必了解容器内部的结构。迭代器是 STL&#xff08;标准模板库&#xff09;的核心部分&#xff0…...

java毕业生就业信息管理系统servlet程序

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…...

linux命令-netstat

linux命令-netstat 查看Linux中网络系统状态信息 补充说明 netstat命令 用来打印Linux中网络系统的状态信息&#xff0c;可让你得知整个Linux系统的网络情况。 语法 netstat(选项)选项 -a或--all&#xff1a;显示所有连线中的Socket&#xff1b; -A<网络类型>或--&…...

微服务+springcloud+springcloud alibaba学习笔记【Rest微服务工程搭建】(2/9)

Rest微服务工程搭建---学习笔记2/91、简单架构示意图2、创建Cloud-provider-payment8001 微服务提供者Module模块2.1. 建Module2.2. 改pom2.3. 写yml2.4. 主启动2.5. 业务类3、创建Cloud-consumer-order80 微服务消费者订单Module模块3.1. 建Module3.2. 改pom3.3. 写yml3.4. 主…...

【Redis7】Redis7 十大数据类型

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Redis7 十大数据类型。 后续会继续分享Redis7和其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一篇文章&#xff1a;《【Redis7】Redis7概述、安装…...

java 死锁怎么解决, 盘它

死锁归根结底还是资源的安排有问题如何使用 jps jstack,解决死锁如果是在分布式的系统中, 我该如何一步一步找到对应的堆栈解决死锁问题呢如何利用 skywalking 帮我解决死锁大多数人一辈子只做了三件事&#xff0c;自欺欺人被人欺 如何使用 jps jstack,解决死锁 jps和jstack都…...

【新2023Q2押题JAVA】华为OD机试 - 服务依赖

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:服务依赖 题目 在某系统中有…...

交友项目【通用设置】三个功能实现

目录 1&#xff1a;交友项目【通用设置】 1.1&#xff1a;查询通用设置 1.1.1&#xff1a;接口地址 1.1.2&#xff1a;流程分析 1.1.3&#xff1a;代码实现 1.2&#xff1a;设置陌生人问题 1.2.1&#xff1a;接口地址 1.2.2&#xff1a;流程分析 1.2.3&#xff1a;代码…...

MongoDB 更新文档(更新多条文档)

上一篇我们介绍了如何更新一条文档&#xff0c;本篇我们介绍一下&#xff0c;如果更新多条文档&#xff0c;我们来回顾一下更新多条文档的语法&#xff1a; db.collection.updateMany(filter, update, options) 上一篇我们对语法中的参数及参数的语法进行了详细的介绍&#xf…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...