当前位置: 首页 > 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…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

【多线程初阶】单例模式 指令重排序问题

文章目录 1.单例模式1)饿汉模式2)懒汉模式①.单线程版本②.多线程版本 2.分析单例模式里的线程安全问题1)饿汉模式2)懒汉模式懒汉模式是如何出现线程安全问题的 3.解决问题进一步优化加锁导致的执行效率优化预防内存可见性问题 4.解决指令重排序问题 1.单例模式 单例模式确保某…...