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在极轴上创建散点图。有了这个功能,人们可以以创新的方式查看圆形或角形数据,例如周期性趋势或定向模式。在本文中&…...

Elasticsearch入门:增删改查详解与实用场景
引言 在我之前做社交架构设计的时候,我们有一项关键且必要的需求:需要存储并记录用户的所有聊天记录。这些记录不仅用于业务需求,也承担了风控审查的职责。因此,在架构设计中,我们需要考虑每天海量的聊天消息量&#…...

【AI论文精读6】SELF-RAG(23.10)附录
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 P1,P2,P3 附录 A SELF-RAG 细节 A.1 反思标记(reflection tokens) 反思标记的定义 下面我们提供了反思标记类型和输出标记的详细定义。前三个方面将在每个片段…...

sql-labs靶场第十七关测试报告
目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库,查看数据库名称 ③爆表,查看security库的所有表 ④爆列,查看users表的所有列 ⑤成功获取用户名…...

面试官:MySQL一次到底插入多少条数据合适啊?
前言 大家好!在互联网时代,我们的每一个动作,无论是浏览网页、分享动态、点赞、购物或者搜索信息,都会在背后产生数据。这些数据,根据其用途和重要性,可能会被储存到不同的地方,其中最常见的存…...

WSL2 构建Ubuntu系统-轻量级AI运行环境
环境:Win11 软件:WSL2 安装环境:Ubuntu 22.04 检查电脑是否开启虚拟化 打开:任务管理器->性能->CPU CPU 开启虚拟化(通常默认是开启的,如果没有开启需要BIOS开启) 虚拟化设置࿰…...

什么是凸二次规划问题
我们从凸二次规划的基本概念出发,然后解释它与支持向量机的关系。 一、凸二次规划问题的详细介绍 凸二次规划问题是优化问题的一类,目标是最小化一个凸的二次函数,受一组线性约束的限制。凸二次规划是一类特殊的二次规划问题,其…...

解决 Elasticsearch cluster_block_exception 错误的终极指南
Elasticsearch 是一个功能强大的分布式搜索引擎,广泛应用于全文检索、实时分析等场景。 尽管如此,像任何复杂系统一样,它也会遇到一些运行问题,其中较为常见且影响较大的就是 cluster_block_exception 错误。 本文将深入解析这种错…...

QT sql驱动错误QMYSQL driver not loaded
引用文章QMYSQL driver not loaded 根据引用文章,到在编译QT mysql.pro的源码步骤时,构建没有报错,但是在对应的文件夹内没有找到编译好的dll文件,经过全电脑搜寻,找到在此文件夹内。 遇到同样错误的朋友可以找找QT安…...

数据驱动,漫途能耗管理系统打造高效节能新生态!
在我国能源消耗结构中,工业企业所占能耗比例相对较大。为实现碳达峰、碳中和目标,工厂需强化能效管理,减少能耗与成本。高效的能耗管理系统通过数据采集与分析,能实时监控工厂能源使用及报警情况,为节能提供数据。构建…...

PH47代码框架软件二次开发极简教程
1. 教程说明 本教程适用于对飞控及Stm32程序设计比较熟悉的二次开发者快速掌握PH47框架的使用要点。本教程仅对PH47框架中最主要的二次开发特性进行简要说明,建议与框架中\DevStudio\Algorithms\Controller_Demo.cpp(.h)示例代码配合学习。关于二次开发特性中的详细…...