Java全栈经典面试题剖析3】JavaSE面向对象2
目录
面试题2.12 Overload和Override的区别
面试题2.13 Overload方法是否可以改变返回值的类型?
面试题2.14 为什么方法不能根据返回类型来区分重载?
面试题2.15 构造器可不可以被重载或重写?
面试题2.16 在 Java 中定义⼀个不做事且没有参数的构造方法的作用
面试题2.17 创建一个子类对象,请写出:父类静态代码块,父类构造方法,父类代码块,子类代码块,子类构造,子类静态代码块。这六个对象的执行顺序
面试题2.18 Java中访问修饰符有哪些? 作用域public,private,protected,以及不写时的区别
面试题2.19 final关键字的用法?
面试题2.20 抽象类和接口的区别?什么时间考虑用抽象类,什么时间考虑用接口?
面试题2.21 接口是什么?为什么要使用接口而不是直接使用具体类?
面试题2.22 什么是类?什么是对象?什么是接口?接口和类的继承有什么本质区别
面试题2.23 Java中有没有多继承?
面试题2.24 什么是内部类?分为哪几种?
面试题2.25 为什么需要内部类?
面试题2.26 局部内部类特性
面试题2.27 内部类与静态内部类的区别
面试题2.28 异常的理解? 什么是检查性异常和非检查性异常? Error和Exception的区别?
面试题2.29 说出十种常见的异常,请举例有哪些异常
面试题2.30 throw和throws的区别
面试题2.31 final,finally,finalize的区别
面试题2.12 Overload和Override的区别
【技术难度: 2 出现频率:2 】
小技巧:按方法声明(返回值类型 方法名 (参数列表) throws 异常)来说两者的区别
方法重载 (Overload),发生在同一个类中:
1. 方法名相同;
2. 参数列表不同 (参数类型,参数顺序,参数个数);
3. 与权限修饰符,返回值类型无关。
方法重写 (Override),发生在子类中:
1.方法名与父类方法名相同;
2.参数列表与父类方法相同(参数类型,参数顺序,参数个数);
3.返回值类型与父类方法相同或是其子类;
4.访问权限不能严于父类方法;
5.抛出的异常与父类相同或是其子类。(抛出的异常不能多于父类)
面试题2.13 Overload方法是否可以改变返回值的类型?
【技术难度: 2 出现频率:2 】
Overload重载方法可以改变返回值类型。不根据返回类型来区分重载。
面试题2.14 为什么方法不能根据返回类型来区分重载?
【技术难度:2 出现频率:2 】
方法重载只和方法名、参数列表有关,与返回值无关。
在Java中,方法的名称和参数列表共同构成了方法的签名,不包括返回值,而编译器用这个签名来确定要调用哪个方法。所以……
面试题2.15 构造器可不可以被重载或重写?
【技术难度:2 出现频率:2 】
构造方法可以重载;但不可以被子类重写,因为Java规定子类不可继承父类构造方法,只能通过super关键字来调用父类构造器。(不可继承父类构造方法?)
面试题2.16 在 Java 中定义⼀个不做事且没有参数的构造方法的作用
【技术难度: 2 出现频率:1 】
如果不在子类构造器中显示调用父类的构造方法,编译器就会自动调用父类的无参构造方法。所以定义类时最好还是带上一个无参构造方法。
第一层:
如果子类调用到了父类无参构造方法时,父类得有无参构造方法,否则报错。后面要学习的框架就会经常用到无参构造方法。
第二层:
比如这种情况,若父类中只定义了有参构造方法,而在⼦类的构造方法中又没有用super来指定调用父类中特定的有参构造⽅法,就会默认调⽤⽗类的无参构造方法。如果父类没有无参构造方法,此时编译时将发⽣错误,因为 Java 程序在⽗类中找不到无参构造方法。
面试题2.17 创建一个子类对象,请写出:父类静态代码块,父类构造方法,父类代码块,子类代码块,子类构造,子类静态代码块。这六个对象的执行顺序
【技术难度: 2 出现频率: 1 】
1.父类静态代码块;
2.子类静态代码块;
3.父类实例代码块;
4.父类构造方法;
5.子类实例代码块;
6.子类构造方法。
静态代码块随着类的加载而被调用,且整个工程只调用一次。
实例代码块在构造方法之前被调用。
面试题2.18 Java中访问修饰符有哪些? 作用域public,private,protected,以及不写时的区别
【技术难度: 1 出现频率: 1 】
1. public公开的,修饰成员变量、方法和类,可以被任何位置访问;
2. protected受保护的,修饰成员变量和方法,可以被本类、同包中的类、非同包的子类访问;
3. 不写就是default默认的(或称friendly友好的),修饰成员变量、方法和类,只能被本类、同包中的类访问,不能被子类访问;
4. private私有的,修饰成员变量和方法,只可在本类中被访问。
面试题2.19 final关键字的用法?
【技术难度:1 出现频率:1 】
1 final可以修饰类,代表最终类,不可被继承;
2 final可以修饰方法,代表最终方法,不可被重写覆盖;(可以被重载吗? --可以,final只是限制其不能被重写)
3 final可以修饰属性,代表常量,一旦赋值不可更改(给null也是赋值)。
扩展(无需背诵):
注意final修饰的引用类型变量,其引用值不可变,而引用值指向的对象的属性不受此限制。
final修饰的方法可以重载。
面试题2.20 抽象类和接口的区别?什么时间考虑用抽象类,什么时间考虑用接口?
【技术难度:2 出现频率:2 】
1.抽象类继承自Object,接口不是;
2.抽象类有构造方法,接口没有;
3.抽象类可以声明成员变量、静态变量、常量;接口只能声明静态常量;
4.抽象类可以声明成员方法、抽象方法、final方法、静态方法;接口可以声明抽象、静态方法、default方法;
5.抽象类是单继承、多实现;接口只能继承多个其他接口。
6.一个类只能继承一个类,但能实现多个接口。
面试题2.21 接口是什么?为什么要使用接口而不是直接使用具体类?
【技术难度: 2 出现频率:2 】
表示编写方法的一种规范,只声明了一组方法但没有实现具体逻辑,要求实现类来实现这些方法的执行逻辑。
接口(Interface)是一种定义了一组方法的抽象类型,但并不提供这些方法的具体实现。接口可以用来控制其实现类必须要实现它的抽象方法,并且一个类可以实现多个接口,相对于类之间的单继承更有可扩展性,并且使用接口开发能够降低程序的耦合性,从而提高程序的可维护性。同时接口还通过不同实现类实现同一个接口来实现多态性。
面试题2.22 什么是类?什么是对象?什么是接口?接口和类的继承有什么本质区别
【技术难度: 2 出现频率:2 】
一:
1.对象是用来描述客观事物的一个实体,由一组属性和方法构成;
2.类是一组具有相同属性和方法的对象的集合,定义了对象将会拥有的特征和行为;
3.接口包含一系列方法的声明,一个接口只有方法的特征没有方法的实现。
总结:类是对象的类型,对象是类的实例,接口声明了对象将会实现的行为。
(类是一系列拥有相同属性和方法的对象的集合,对象是类的实例,接口是对类的行为规范,是类编写方法的规范。)
二:
一个类只能继承一个父类,可以实现多个接口。
面试题2.23 Java中有没有多继承?
【技术难度: 2 出现频率: 2 】
java中没有多继承,不过可以多实现,一个类实现多个接口。通过接口可以近似的实现多继承,而且接口可以继承多个其他接口。
为什么舍弃多继承?
防止菱形继承问题导致的二义性和代码冗余。
面试题2.24 什么是内部类?分为哪几种?
【技术难度:2 出现频率:1 】
一:
内部类是指在一个外部类的内部再定义一个类,它作为外部类的一个成员,并且依附于外部类而存在。内部类可为静态、可用各种访问权限修饰符,而外部类只能用public和缺省的包访问权限。
二:
内部类主要有成员内部类、局部内部类(在方法里面)、静态内部类、匿名内部类(没有类名)。
面试题2.25 为什么需要内部类?
【技术难度:2 出现频率:1 】
使用内部类最吸引人的原因是模拟实现多继承。
Java是不支持多继承的,但我们可以通过内部类来模拟实现多继承:在一个外部类内部创建多个内部类,每个内部类都实现不同的方法。这样,你可以通过外部类的实例来访问这些内部类,并间接地实现类似多重继承的效果。但需要注意的是,这实际上是利用了内部类的封装性和接口的多实现性,而不是直接的多重继承。
面试题2.26 局部内部类特性
【技术难度: 2 出现频率:1 】
局部内部类可以直接访问所在方法的final常量,jdk1.7之前 final必须加,jdk1.8开始,给变量赋值后,final可以省略。
面试题2.27 内部类与静态内部类的区别
【技术难度: 2 出现频率:1 】
内部类:
1.非静态内部类中的变量和方法不能声明成静态的;
2.内部类实例化时,若B是A的内部类,需要先创建A的对象,再通过A对象的引用创建B对象(A.B b = new A().new B(););
3.内部类可以直接调用外部类的一切资源,包括私有的。
静态内部类:
1.静态内部类的属性和方法,都可以声明为静态或非静态的;
2.实例化静态内部类时,若B是A的内部类,可直接通过A.B创建B对象(A.B b = new A.B(););
3.静态内部类只能直接调用外部类的静态属性及静态方法。
扩展(无需背诵):
- 静态内部类其实叫静态嵌套类(static nested classes)。
- 静态嵌套类就是原本可以完全独立存在的类,不过还是借外部类的壳用一下,来隐藏它自己。
- 内部类是外部类的一部分,它知道外部类的全部,没有外部类就没有内部类,内部类对象以外部类对象存在为前提。
面试题2.28 异常的理解? 什么是检查性异常和非检查性异常? Error和Exception的区别?
【技术难度:2 出现频率: 1 】
第一层:
Java异常的基类是Throwable,其下有两个子类,分为Exception异常和Error错误。Error一般指JVM出现的错误,也叫做严重异常,程序无法做处理。Exception是程序本身可以处理的异常,分为检查异常和运行时异常。
第二层:
检查异常都直接继承自Exception类。运行时异常都继承自RuntimeException类(Exception的子类)。
第三层:
检查异常Java程序必须显示处理,try/catch捕捉或throws声明抛出。非检查异常Java程序可选择处理或不处理。(检查性异常编译器会提示,区分编写错误和检查性异常)(必须处理的含义就是:只要有可能出现,就一定要处理。)
扩展(无需背诵):
Runtime - 运行时
checked - 检查
unchecked - 非检查
面试题2.29 说出十种常见的异常,请举例有哪些异常
【技术难度: 2 出现频率: 1 】
5个运行时异常:
NullPointerException 空指针异常
NumberFormatException 数字格式化异常
IndexOutOfBoundsException 下标越界
ArrayIndexOutOfBoundsException 数组下标越界
StringIndexOutOfBoundsException 字符串下标越界
ClassCastException 类型转换异常
5个检查异常:
FileNotFoundException 文件未找到异常
ClassNotFoundException 类未找到异常
IOException IO流异常
SQLException SQL异常
EOFException 文件末尾异常
面试题2.30 throw和throws的区别
【技术难度: 2 出现频率:1 】
1.throws用在方法声明的位置,throw用在方法体内;
2.throws是可能抛出异常,throw是一定抛出异常;
3.throws后面跟异常类名,throw后面跟异常对象。
面试题2.31 final,finally,finalize的区别
【技术难度: 2 出现频率: 1 】
1.final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可继承;
2.finally是异常处理语句结构的一部分,表示总是执行;
3.finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等,JVM不保证此方法总被调用。
------------------------END-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。
相关文章:

Java全栈经典面试题剖析3】JavaSE面向对象2
目录 面试题2.12 Overload和Override的区别 面试题2.13 Overload方法是否可以改变返回值的类型? 面试题2.14 为什么方法不能根据返回类型来区分重载? 面试题2.15 构造器可不可以被重载或重写? 面试题2.16 在 Java 中定义⼀个不做事且没有…...
@JsonIgnoreProperties做接口对接时使用带来的好处
最近看到有个同事,在代码里面加了JsonIgnoreProperties这个注解,以前还真没有经常去用过,接口对接尤其是跟金蝶、用友等第三方,这个注解在接收数据是非常好用的;接下来带大家一起了解下具体的特性和使用方式 JsonIgno…...

SpringBoot整合mybatisPlus实现批量插入并获取ID
背景:需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了,在海量数据下其性能是最慢的。数据量小的情况下,没什么区别。 【1】saveBatch(一万条数据总耗时:2478ms) mybatisplus扩展包提供的:…...
实战RAG第一天——llama_index向量索引,查询引擎,搜索知识库问答,全部代码,保姆级教学
一、llama_index简介 llama_index(以前称为 GPT Index)是一个用于构建、查询、索引大型文档和数据集的开源框架。它的核心功能是帮助开发者将大语言模型(LLM)与自己的数据集无缝集成,从而进行知识库的构建、查询等任务。llama_index 使用 Python 编写,并结合了多种大语言…...
大数据治理
大数据治理是指对大数据的管理和控制,以确保数据的质量、可用性、安全性和合规性。随着大数据技术的不断发展,企业和组织面临着越来越多的数据管理挑战,如数据质量问题、数据安全问题、数据合规问题等。大数据治理成为了企业和组织应对这些挑战的重要手段。 一、大数据治理…...

云计算作业
关闭防火墙 停用Linux 挂载 下载nginx程序 启动nginx程序 连接网卡配置文件并且修改 更改模式为静态手动,并且分别修改ip地址,网关地址,dns 激活 创建自定义文件 定义server模块 监听地址 设置目录 匹配 激活网址根目录 创建目录文…...

复制文件到U盘提示:对于目标文件系统,文件过大
查看U盘属性的文件系统是否为FAT32,需将其改为NTFS 方法一 Win R 输入cmd打开命令行,输入以下命令(注:f为U盘盘符) convert f: /fs:ntfs /x方法二 格式化U盘,右键点击U盘进行格式化,文件系…...

SpringBoot+Swagger2.7.0实现汉化(2.8.0不行)
场景 SpringBootSwagger2实现可视化API文档流程: SpringBootSwagger2实现可视化API文档流程_swagger 可视化端口-CSDN博客 上面SpringBoot中使用swagger的效果 上面使用的是swagger2.8.0,且在线API是英文的。现在要将其进行汉化。 汉化效果 实现 首先打开sprin…...
c++ 散列表
散列表(Hash Table)是一种高效的数据结构,广泛用于实现快速的键值对存储。 基本概念 散列表使用哈希函数将键映射到数组的索引。其主要优点在于平均情况下提供常数时间复杂度的查找、插入和删除操作。 哈希函数: 将键映射到一个固定大小的…...

Windows通过netsh控制安全中心防火墙和网络保护策略
Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口(禁用/启用)前&am…...
UML(Unified Modeling Language,统一建模语言)
UML(Unified Modeling Language,统一建模语言)是一种标准化的图形化语言,用于软件工程中的可视化建模。UML由Grady Booch、James Rumbaugh和Ivar Jacobson共同开发,他们各自的工作(Booch方法、OMT方法和OOS…...

深⼊理解指针(2)
目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. ⼆级指针 5. 指针数组 6. 指针数组模拟⼆维数组 1. 数组名的理解 我们在使⽤指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[…...

Ubuntu中MySQL远程登录设置
mysql单独放在一台Ubuntu服务器上,我远程连接不上。可能是安装的时候忘记设置远程登录了。事后补救措施如下: MySQL 绑定地址配置问题 MySQL 可能只绑定了 localhost,无法接受来自外部主机的连接。你需要检查 MySQL 的配置文件 /etc/mysql/…...
typescript 中封装一个 class 来解析接口响应数据
在TypeScript中,封装一个类来解析接口响应数据是一个常见的做法,它允许你将与接口响应相关的逻辑封装在一个可复用的单元中。下面是一个示例,展示了如何定义一个TypeScript类来解析一个假设的API接口响应数据。 首先,我们定义一个…...

[LeetCode] 21. 合并两个有序链表
题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2: 输入:l1 [], l2 […...

CTFHUB技能树之SQL——MySQL结构
开启靶场,打开链接: 先判断一下是哪种类型的SQL注入: 1 and 11# 正常回显 1 and 12# 回显错误,说明是整数型注入 判断一下字段数: 1 order by 2# 正常回显 1 order by 3# 回显错误,说明字段数是2列 知道…...
Git小知识:合理的分支命名约定
前言:创建新分支时,对 Git 分支进行合理的命名非常重要,应选择有描述性的名称,因为它可以帮助团队成员更好地理解分支的目的和内容,以便将来回顾时能立即明白分支的目的。以下是一些常见的分支命名约定: 功…...

Ubuntu如何显示pcl版本
终端输入: apt-cache show libpcl-dev可以看到,Ubuntu20.04,下载的pcl,应该都是1.10版本的...

wordcloud 字体报错
wordcloud 字体报错 词云库报错:Only supported for TrueType fonts字体文件问题pillow版本的问题wordcloud版本问题(我的最终解决方案) 词云库报错:Only supported for TrueType fonts 字体文件问题 解决方法 写绝对路径 &…...

使用Matplotlib绘制极轴散点图
散点图对于理解数据可视化中变量之间的相互作用至关重要。虽然散点图经常在笛卡尔坐标中创建,但我们也可以使用Matplotlib在极轴上创建散点图。有了这个功能,人们可以以创新的方式查看圆形或角形数据,例如周期性趋势或定向模式。在本文中&…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

云原生时代的系统设计:架构转型的战略支点
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、云原生的崛起:技术趋势与现实需求的交汇 随着企业业务的互联网化、全球化、智能化持续加深,传统的 I…...