2022 年 130 多个 Java 面试问题和答案
已发表: 2021-01-01Java 面试问答
在本文中,我们整理了最常见的 Java 面试问题。 这些问题将使您了解面试官在 Java 编程面试期间可能会问您的问题类型
作为应届生,您要么刚刚参加了一次面试,要么计划很快参加一次。 作为一名希望在软件编程领域发展自己职业生涯的入门级求职者,您可能会对即将到来的面试感到紧张。 我们所有人都有恐慌的时刻,我们会感到茫然,甚至可能忘记线程是什么。 我们将为您简化它,您需要做的就是深呼吸并检查最有可能被问到的问题。
你无法避免恐慌,但你绝对可以做好准备,这样当你走进那个面试室时。 你很自信,知道你可以处理面试官可能扔给你的任何事情。
从世界顶级大学在线学习软件工程课程。 获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。
这是一份综合的 24 个 Java 面试问题和答案(2022 年最新版)的汇编列表,它将帮助您树立信心,并确保您顺利通过面试。
1. JVM由什么组成?
JVM 是 Java Virtual Machine 的缩写,任何系统都需要运行 Java 程序。 其架构主要包括:
● Classloader:是JVM 的一个子系统,主要功能是在Java 程序运行时加载类文件。
● 堆:它是用于分配对象的运行时数据。
● 类区:保存每个类文件的类级别,如静态变量、元数据、常量运行池等。
● Stack:用于存放临时变量。
● 寄存器:寄存器包含当前正在执行的JVM指令的地址
● 执行引擎:EE 由虚拟处理器、读取字节码后执行指令的解释器和在执行速度较慢时提高性能的 JIT 编译器组成。
● Java Native Interface:作为与其他用C、C++等开发的应用程序交互的通信媒介。

2. 什么是面向对象编程? Java是面向对象的语言吗?
本质上,面向对象编程是一种基于对象概念的编程范式。 简单地说,对象是容器——它们包含字段形式的数据和过程形式的代码。 按照这个逻辑,面向对象的语言是一种适用于对象和过程的语言。
由于 Java 使用了 8 种原始数据类型——布尔、字节、字符、整数、浮点、长、短、双精度——它们不是对象,因此不能将 Java 视为 100% 面向对象的语言。
3. 你对 Java 环境中的聚合有什么理解?
聚合是一种关联形式,其中每个对象都分配有自己的生命周期。 但是,这里有所有权,子对象不能以任何方式属于任何其他父对象。
4. 用 Java 命名超类。
Java.lang。 所有不同的非原始类型都直接或间接地从此类继承。
5.解释Java中'finally'和'finalize'的区别?
与 try-catch 块一起使用,'finally' 块用于确保始终执行特定的代码片段,即使执行是由 try-catch 块抛出的。
相比之下,finalize() 是对象类中的一个特殊方法。 当从对象中收集垃圾值时,通常会覆盖释放系统资源。
6. 什么是匿名内部类? 它与内部类有何不同?
任何没有名称的本地内部类都称为匿名内部类。 由于它没有任何名称,因此不可能创建其构造函数。 它总是要么扩展一个类,要么实现一个接口,并在单个语句中定义和实例化。
非静态嵌套类称为内部类。 内部类与类的对象相关联,它们可以访问外部类的所有方法和变量。
7.什么是系统类?
它是Java中的核心类。 由于类是最终的,我们不能通过继承覆盖它的行为。 我们也不能实例化这个类,因为它不提供任何公共构造函数。 因此,它的所有方法都是静态的。
8. Java中如何创建守护线程?
我们使用类 setDaemon(true) 来创建这个线程。 我们在 start() 方法之前调用这个方法,否则我们会得到 IllegalThreadStateException。
9. Java 支持全局变量吗? 为什么/为什么不?
不,Java 不支持全局变量。 这主要是因为两个原因:
● 它们在命名空间中产生冲突。
● 它们破坏了参照透明性。
10. RMI 对象是如何开发的?
可以采取以下步骤来开发 RMI 对象:
● 定义接口
● 实现接口
● 用java编译器编译接口及其实现
● 使用 RMI 编译器编译服务器实现
● 运行 RMI 注册表
● 运行应用程序
11、解释时间片和抢占式调度的区别?
在时间切片的情况下,任务在指定的时间范围内执行 - 也称为切片。 之后,它进入就绪队列——一个“就绪”任务池。 然后调度程序根据优先级和其他因素选择下一个要执行的任务。
而在抢占式调度下,具有最高优先级的任务将被执行,直到它进入死亡或警告状态,或者另一个更高优先级的任务出现。
12.垃圾收集器线程是一个什么样的线程?
它是一个守护线程。
13. Java中线程的生命周期是什么?
Java 中的任何线程在其生命周期中都会经历以下阶段:
● 新
● 可运行
● 跑步
● 不可运行(阻塞)
● 终止
14. 说明反序列化和序列化过程中使用的方法。
ObjectInputStream.readObject
读取文件并反序列化对象。
ObjectOutputStream.writeObject
序列化对象并将序列化的对象写入文件。
15. 什么是 volatile 变量,它们的用途是什么?
易失性变量是总是从主内存中读取的变量,而不是从线程的高速缓存中读取的变量。 这些通常在同步期间使用。
16. Java 中的包装类是什么?
Java 中的所有原始数据类型都有一个与之关联的类——称为包装类。 它们被称为包装类,因为它们将原始数据类型“包装”到类的对象中。 简而言之,它们将 Java 原语转换为对象。
17. 我们如何制作单例类?
通过将其构造函数设为私有。
18、Java中异常类的重要方法有哪些?
● 字符串 getMessage()
● 字符串 toString()
● 无效 printStackTrace()
● 同步 Throwable getCause()
● public StackTraceElement[] getStackTrace()
19.我们如何在Java中创建一个线程?
我们可以按照以下两种方式中的任何一种在 Java 中创建线程:
● 通过扩展线程类
这种方法的缺点是我们不能扩展任何其他类,因为线程类已经被扩展了。
● 通过实现Runnable接口
20. 解释 get() 和 load() 方法的区别。
get() 和 load() 方法有以下区别:
● 如果找不到对象,get() 将返回null,而load() 会抛出ObjectNotFound 异常。
● get() 总是返回一个真实对象,而load() 返回一个代理对象。
● get() 方法总是命中数据库,而load() 没有。
● 如果您不确定实例是否存在,则应使用get(),而如果您确定实例存在,则应使用load()。
21. 局部变量的默认值是多少?
它们未初始化为任何默认值。 原语或对象引用都不是。
22. Java 中的 Singleton 是什么?
它是一个在整个 Java 应用程序中具有一个实例的类。 例如 java.lang.Runtime 是一个 Singleton 类。 Singleton 的主要目标是通过保留私有构造函数来控制对象的创建。
23.什么是静态方法?
无需创建类的实例即可调用静态方法。 静态方法属于类而不是类的对象。 静态方法可以访问静态数据成员并可以更改它的值。
24. 有什么例外?
例外 程序期间的异常情况。 这可能是由于不正确的用户输入或程序员编写的逻辑不正确。
25. 简单来说,您如何定义 Java?
Java 是一个高级、独立于平台、面向对象的门户,并为构建复杂的程序、应用程序和网站提供高性能支持。 Java 是一种通用编程语言,它使开发人员能够通过其编写一次随处运行 (WORA) 环境构建功能丰富的应用程序。 来自加拿大的计算机科学家 James Arthur Gosling 于 1991 年开发了 Java,并被普遍称为“Java 博士”。 今天,Java 已成为现代 IT 行业的重要基础。
26 . 什么是 Java 字符串池?
Java 中的字符串池是一个独特的地方,它有一个通过 Java 堆内存存储的字符串池。 这里,String 代表 Java 中的一个特殊类,可以使用 new 运算符或使用双引号中的值创建字符串对象。
String 在 Java 中是不可变的,因此使 String pool 的可行性,然后通过 String interning 概念进一步实现。
27 、什么是Java中的集合类? 列出它的方法和接口?
Java 集合类是特殊的类,专门用于专门用于返回集合的静态方法。 默认情况下,Java Collection 继承一个类并具有两个基本功能:
- 它们支持并使用为每个特定集合返回新集合的多态算法进行操作。
- 如果类对象或集合具有 Null 值,Java Collection 中的方法会抛出 NullPointerException。
这些被表示和声明为 Java.util.Collection 类。
Java Collection 类有 60 多种方法、修饰符和类型。 以下是 Java 集合类中最重要的方法列表:
S. 没有。 | 修饰符、方法和类型 | 描述 |
1. | 静态 <T> 布尔addAll() | 此方法允许将特定元素添加到特定集合中。 |
2. | 静态 <T> 队列 <T> asLifoQueue() | 此方法允许在视图中将集合列为后进先出 (LIFO)。 |
3. | 静态 <T> int binarySearch() | 此方法允许搜索特定对象,然后在排序列表中返回它们。 |
4. | 静态 <E> 集合<E> | 此方法从任何特定集合返回动态视图。 |
5. | 静态 <E> 列表 <E> | 此方法从特定列表返回动态类型安全视图。 |
以下是 Java 集合的一些示例:
Java 集合 min() 示例:
1 2 3 4 5 6 7 8 9 10 11 12 | 导入java.util.* ; 公共类CollectionsExample { 公共静态无效主要(字符串一个[]){ List <整数> list = new ArrayList <整数>(); 列表。 添加( 90 ); 列表。 添加( 80 ); 列表。 添加( 76 ); 列表。 添加( 58 ); 列表。 增加( 12 ); 系统。 出来。 println ( "集合中的最小值元素:" + Collections.min ( list )); } } |
输出将是:
集合中的最小值元素:12 |
Java 集合 max() 示例:
1 2 3 4 5 6 7 8 9 10 11 12 | 导入java.util.* ; 公共类CollectionsExample { 公共静态无效主要(字符串一个[]){ List <整数> list = new ArrayList <整数>(); 列表。 添加( 90 ); 列表。 添加( 80 ); 列表。 添加( 76 ); 列表。 添加( 58 ); 列表。 增加( 12 ); 系统。 出来。 println ( "集合中的最大值元素:" + Collections.max ( list )); } } |
输出将是:
集合中的最大值元素:90 |
28 . 什么是小服务程序?
Servlet 是 Java 软件组件,可通过技术、API、接口、类或任何 Web 部署向 Java 服务器添加更多功能。 Servlet 专门在基于 Java 的 Web 应用程序服务器上运行,并且能够处理来自 Web 服务器的复杂请求。 Servlet 增加了更高性能、健壮性、可伸缩性、可移植性的好处,并确保 Java 应用程序的安全性。
Servlet 进程或执行:
- 这从用户从 Web 浏览器发送请求时开始。
- Web 服务器接收该请求,然后将其传递给特定的 servlet。
- 然后 Servlet 处理此请求以获取带有输出的特定响应。
- 然后 Servlet 将此响应发送回 Web 服务器。
- 然后 Web 服务器获取浏览器在屏幕上显示的信息。
Java Servlet 带有多个类和接口,例如 GenericServlet、ServletRequest、Servlet API、HttpServlet、ServeResponse 等。
29.什么是请求调度程序?
在 Servlet 中,RequestDispatcher 充当一个接口,用于定义一个对象以在一侧接收来自客户端的请求,然后将其分派到另一侧的特定资源(可能是 servlet、HTML、JSP)。 这个 RequestDispatcher 一般有两种方法:
无效转发(ServletRequest 请求,ServletResponse 响应) | 这允许并将来自任何 servlet 的请求以 Servlet、HTML 文件或 JSP 文件的形式转发到服务器资源。 |
无效包含(ServletRequest 请求,ServletResponse 响应) | 它以响应的形式包含特定资源的内容,例如 HTML 文件、JSP 页面或 servlet。 |
30. servlet 的生命周期是什么?
Servlet 是一个 Java 软件组件,其主要功能是先接受请求,然后处理请求,并在 HTML 页面中给用户一个响应。 这里 Servlet Container 管理 servlet 的生命周期。 以下是主要阶段:
- 加载 Servlet。
- 然后初始化Servlet。
- 处理请求(调用服务方法)。
- 然后销毁 Servlet。
这是一个显示 Java Servlet 生命周期的快速图表:
资源
- 加载 Servlet
Servlet 的生命周期从 Servlet 容器中的加载阶段开始。 Servlet 以两种方式之一加载:
- 将 servlet 设置为正整数值或零整数值。
- 其次,这个过程可能会延迟,因为容器会选择正确的 servlet 来处理请求。
现在容器首先加载 Servlet 类,然后通过无参数构造函数构建一个实例。
- 初始化 Servlet
下一步是使用 Servlet.init(ServletConfig) 方法为实例 JDBC 数据源初始化 Servlet。
- 处理请求(调用服务方法)
在这里,Servlet 接受客户端请求并使用 service() 方法执行所需的操作。
- 销毁 Servlet
现在 Servlet 容器通过执行和完成特定任务并调用实例中的 destroy() 方法来销毁 servlet。
31. servlet 中有哪些不同的会话管理方法?
会话在用户登录网站后跟踪用户的活动。 会话管理提供了为每个独立用户获取信息的机制。 以下是 servlet 中会话管理的四种不同方法:
- HttpSession
- 饼干
- 网址重写
- HTML 隐藏字段
32.什么是 JDBC 驱动程序?
Java 数据库连接 (JDBC) 在这里充当允许 Java 应用程序与数据库通信的软件组件。
JDBC驱动在环境中有以下四种:
- JDBC-ODBC 桥驱动程序
- 网络协议驱动程序(中间件驱动程序)
- 数据库协议驱动程序(完全 Java 驱动程序)
- 本机 API 驱动程序
33.什么是JDBC Connection接口?
连接定义了数据库和 Java 应用程序之间的会话。 JDBC 连接接口只是 java.sql 包的一部分,它提供特定数据库的会话信息。 这些代表多个 SQL 语句,用于在单个连接接口的上下文中执行和结果。 以下是 Connections 接口的主要方法:
- createStatement() :创建特定的语句对象,用于将 SQL 语句添加到特定数据库。
- setAutoCommit(boolean status) :定义提交模式与 false 或 true 指令的连接。
- commit() :从上次提交中进行所有修改,并进一步释放当前由特定 Connection 对象持有的任何数据库。
- rollback() :撤消或回滚过去或当前事务中所做的所有更改,并释放连接对象中当前持有的数据库。
- close() :终止或关闭当前连接,并立即释放或清除 JDBC 资源。
34 、命名Spring框架的不同模块?
Spring框架中有多个模块:
- 网页模块
- 支柱模块
- 小服务程序模块
- 核心容器模块
- 面向方面的编程 (AOP)
- 应用程序上下文模块
- MVC 框架模块
- JDBC 抽象和 DAO 模块
- OXM模块
- 表达语言模块
- 交易模块
- Java 消息服务 (JMS) 模块
- ORM集成模块
这些模块以组的形式出现:
资源
35. 讲解Spring中的Bean,列出Spring bean的不同作用域。
Bean 是 Spring 框架有效管理结构的基本概念之一。 在一个简单的定义中,Spring Bean 代表了管理对象的 IoC 容器,这些对象构成了应用程序的主干。
Spring Bean 的作用域:
范围在应用程序中有效使用 Spring bean 方面起着至关重要的作用。 Scope 帮助我们了解 Spring Bean 的生命周期,它们有以下类型。
S. 没有。 | 范围和描述 |
1. | 单例——默认情况下,Spring bean 范围有一个单例范围,它只代表 Spring IOC 容器的一个实例。 每个请求都共享同一个对象。 |
2. | 原型——在这种情况下,每次对特定 bean 发出请求时,都会为每个 bean 定义调用并创建一个新实例。 |
3. | 请求- 在此范围内,将为该特定 bean 的每个 HTTP 请求调用并创建一个 bean。 |
4. | 会话——这个范围定义了特定全局 HTTP 会话中生命周期的单个 bean 使用。 |
5. | 全局会话——此范围允许特定生命周期的单个 bean 在全局 HTTP 会话中实现。 |
注意:最后三个范围仅适用于 Web 感知 Spring ApplicationContext。
必读:为什么 Java 如此受开发人员欢迎
36.解释DispatcherServlet和ContextLoaderListener的作用。
在 web.xml 文件中配置基于 XML 的 Spring MVC 配置时,DispatcherServlet 和 ContextLoaderListener 的两个声明在补充框架目的方面起着至关重要的作用。
- DispatcherServlet –
DispatcherServlet 的主要目的是管理针对特定匹配配置的 URI 模式的传入 Web 请求。 DispatcherServlet 充当 Spring MVC 应用程序核心的前端控制器,专门加载配置文件,然后初始化该文件中存在的正确 bean。 并且当注释被启用时,它还可以检查和扫描所有使用@Repository、@Component、@Service 或@Controller 注释的配置和包。
- ContextLoaderListener –
ContextLoaderListener 在这里充当请求监听器,用于启动和关闭根 WebApplicationContext。 因此,它通过 DispatcherServlet 上下文创建并与子上下文共享根应用程序上下文。 应用程序只能在 web.xml 中为 ContextLoaderListener 使用一个条目。
37. 解释 Hibernate 架构。
Hibernate 定义了一种分层架构,使用户能够在不了解底层 API 的情况下进行操作和执行,即,Hibernate 作为一个框架来构建和开发独立于数据库软件的持久性逻辑。
Hibernate 架构主要有四层:
- Java应用层
- 数据库层
- 后端 API 层
- Hibernate 框架层
Hibernate 架构的元素
Hibernate 架构有几个方面和范围。 要了解更多关于它们的信息,您必须了解 Hibernate 架构的元素。
- SessionFactory: Sessionfactory 提供了创建仅存在于 org.hiberate 包中的会话对象的方法。 它本质上是线程安全的,不可变的,并且持有和保存数据的二级缓存。
- 会话:会话对象通过休眠框架为连接和数据库软件提供接口。
- 事务:帮助事务管理并允许更改数据库的接口。
- ConnectiveProvider: JDBC 连接的一部分,它将主应用程序与 DataSource 或 DriverManager 分开。
- TransactionFactory:表示事务的工厂。
38. Java 中的异常层次结构是什么?
异常定义了在程序运行或执行期间出现的不需要的事件。 异常会破坏程序的正常流程。
Exception Hierarchy 是 java.lang.Exception 类的一部分,仅属于主要 Throwable 类。 另一个子类“ Error ”也代表 Java 中的 Throwable 类。 尽管错误是发生故障时的异常情况,但它们仍然没有被 Java 程序处理或清除。
Java 中有两个用于异常层次结构的主要子类,分别是 RuntimeException 类和 IOCException 类。
39.什么是同步?
Java 中的同步定义了管理和控制多个线程对特定资源的访问的能力。 因此,一个线程当前可以访问特定资源。 在这里,Java 允许开发线程,然后通过同步块同步任务。
这些同步块只允许一个线程在特定时间执行并阻塞其他线程,直到当前线程退出该块。 这里监视器概念对于在 Java 中实现同步至关重要。 一旦线程进入锁定阶段,它就被称为进入监视器。 因此,除非第一个线程退出监视器,否则锁定所有其他线程。
40. 哪些特性使 Java 成为最好的编程语言之一?
以下是使 Java 在编程世界中开始学习曲线的主要功能:
- 简单性: Java 的学习和编写都非常简单。 Java 语法在 C++ 中,允许开发人员无缝地编写程序。
- OOPS: Java 基于面向对象的编程系统 (OOPS),因此能够在具有不同数据和行为的多种类型的对象中构建代码。
- 动态: Java 是一种完整的动态语言,支持随时随地加载动态类。 并且对C、C++等原生代码语言也有全面的支持。
- 平台无关: Java 还支持专有和平台无关的编程语言,因此,允许开发人员仅在他们的平台上运行他们的程序。
- 可移植性: Java 具有一次写入任何地方的方法,允许代码在任何平台上运行。
- 安全性:遵循 ByteCode 的概念、异常处理和不使用任何显式指针,使 Java 成为一个高度安全的环境。
Java 也是架构中立的,不依赖于任何架构。 强大的内存管理和自动垃圾收集为其环境增加了更多的健壮性。
41. 是什么让 Java 实现了高性能?
在其架构中使用即时 (JIT) 编译器使 Java 成为高性能编程语言之一,因为它将指令转换为字节码。
42. 说出最流行的 Java IDE。
业界有许多适用于 Java 的 IDE。 以下是您今天可以用来开始学习这种编程语言的前五个 Java IDE:
- 蚀
- 网豆
- 智能
- 开发人员
- 日食
43.定义Java与其他平台的主要区别?
使 Java 从其他平台中脱颖而出的两个主要区别是:
- Java 主要是一个基于软件的平台,而其他的可以是基于软件或硬件的平台。
- Java 在任何硬件平台上运行或执行,而其他平台则需要特定的硬件要求。
44. 是什么让 Java 具有“一次编写,随处运行”(WORA)的本质?
嗯,一个字的答案是字节码。 Java 编译器将所有 Java 程序转换为特定的字节码,充当机器代码和源代码之间的中介语言。 ByteCode 可以在任何计算机上运行,并且没有平台依赖性。
45. 解释 Java 中使用的不同类型的访问说明符。
在 Java 编程语言中,访问说明符表示类、变量或方法的确切范围。 有四个主要的访问说明符:
- 公共定义的变量、方法或类可跨任何方法或类访问。
- 受保护的访问说明符将类、方法和变量的范围定义到同一个包、同一个类或类的特定子类。
- 默认范围适用于所有当前只能访问包的类、变量和方法。
- Private作用域只保留对特定类的类、变量和方法的访问。
阅读:Java Swing 项目
46.解释Java中包的含义及其优点。
包是类似类型(接口、类、注释和枚举)的分组机制,可确保资产保护和全面的名称管理。
以下是Java中包的优点:
- 当两个不同的包中存在同名的类时,包可以帮助我们防止命名冲突。
- 包有助于系统地进行访问控制。
- 构建包使用的隐藏类。
- 帮助定位包的相关类。
47. 你会如何在 Java 中定义构造函数?
构造函数是在创建对象时初始化对象的特殊代码块。 尽管它与实例方法相似,但构造函数仍然不是方法,因为它们没有任何明确的返回类型。 因此,每次在系统中创建对象时,都会调用一个构造函数来执行该构造函数。 如果没有定义构造函数,则编译器使用默认构造函数。
这是Java中构造函数的简单介绍:
1 2 3 4 5 6 | 公共类MyClass { //这是构造函数 我的类(){ } .. } |
48. Java 中使用了哪些不同类型的构造函数?
Java 中使用了三种类型的构造函数:
- 默认构造函数:当开发人员不使用构造函数时,Java 编译器会在 .class 文件中添加一个更具体的默认构造函数。
- 无参数构造函数:在这种情况下,构造函数中没有参数,编译器不接受任何参数,因为实例变量方法使用特定的固定值初始化。
- 参数化构造函数:在这种情况下,构造函数中存在一个或多个参数,仅写在主元素的括号内。
49.构造函数和方法有什么区别?
构造函数和方法的主要区别是:
- 目的:构造函数的目的是初始化类的对象,而方法执行代码执行的特定任务。
- 该方法具有返回类型,而构造函数没有。
- 在方法中,有抽象、静态、最终和同步,而在构造函数中,你不能制作具体的过程。
50.解释Local变量和Instance变量的含义?
- 局部变量存在于方法中,作用域仅存在于方法中。
- 实例变量只存在于类中并在类中定义它们的范围。
51.解释Java中Class的含义?
在 Java 中,所有的代码、变量和方法都定义在类中。
- 变量表示定义特定类状态的属性。
- 方法代表业务逻辑在哪里发挥作用。 方法包括一组符合要求的语句和指令。
下面是一个 Java 类的简单示例:
1 2 3 4 5 6 7 | public class Addition { //类名声明 诠释x = 10 ; //变量声明 整数y = 10 ; public void add (){ //方法声明 int z = a + b ; } } |
52.解释Java中Object的含义?
对象被定义为仅具有特定状态和行为的类的实例。 例如,狗具有特定的名称、品种和颜色状态,而行为包括吠叫、摇尾巴等。因此,只要 JVM 读取任何 new() 关键字,就会创建相应的实例。 需要首先声明一个对象,然后实例化并最终初始化以进一步执行。
53. 定义Java语言中字节数据类型的默认值。
对于 Byte 数据类型,默认值为 0。
54.为什么字节数据类型在Java中更有利?
由于字节数据类型几乎比整数小四倍,因此它可以为大型数组存储更多空间。
55. 解释 Java 中的 OOP 概念。
OOP 是 Java 编程语言的基本概念。 这些包括抽象、多态、继承和封装。 Java OOP 概念使开发人员能够创建变量、方法和组件,从而进一步允许他们以定制的方式重用它们,同时保持安全性。
56.解释继承的含义。
在 Java 中,继承是一种特定机制,它允许一个类获取另一个类的属性(带有字段和方法)。 继承是 Java OOP 的基本概念之一。
继承可以构建新类,在现有类上添加更多字段和方法,以便以任何方式重用它们。
- 子类是继承另一个类的属性的子类。
- 超类是继承其属性的类。
57.解释Java中封装的概念?
作为 Java OOP 的主要概念之一,封装仅允许将数据和代码包装在单个单元中。 封装也称为数据隐藏,特定类的变量对所有其他类隐藏,并且只能通过现有类的方法访问。
在 Java 中实现封装的两个基本要素是:
- 将特定类的变量声明为私有变量。
- 利用公共 setter 和 getter 方法进行更改和查看变量值。
58.解释多态的概念。
Java 中的多态性允许开发人员以多种方式执行单个任务。 Java 中有两种类型的多态,即运行时和编译时。 您可以使用覆盖和重载方法来操作 Java 中的多态性。
59.解释接口的含义。
在 Java 中,我们无法实现多重继承。 在这里,接口在克服这个问题以实现抽象、辅助多继承以及支持松散耦合方面起着至关重要的作用。 现在,我们在与最新 Java 更新的接口中拥有了一个默认的、静态的和私有的方法。
60. 抽象类是什么意思?
抽象类是使用 Java 中的特定抽象关键字构建的。 它们代表抽象和非抽象方法。
61.解释Java中的抽象类?
抽象是对用户隐藏实现信息然后仅表示用户功能的基本属性之一。 例如,当您从一个人向另一个人发送 SMS 时。 The user gets to know only the message and number while the backend process remains hidden.
You can achieve abstraction in Java using the following two ways:
- Abstract Class (0 to 100%)
- Interface (100%)
62. Explain the difference between Abstraction and Encapsulation in Java.
Here are the main differences:
抽象 | 封装 |
Abstraction aims to gain information. | Encapsulation's main aim is to contain or procure information. |
In the abstraction process, issues or problems are handled at the interface/ design level. | In Encapsulation, problems are handled at a specific implementation level. |
Abstraction aids in hiding unwanted information. | Encapsulation method applies hiding data within a single unit. |
Implemented with interfaces and abstract classes. | Implemented with a particular access modifier (public, private, and protected). |
Use abstract classes and interfaces to hide complexities. | Use getters and setters to hide data. |
Objects that extend to abstraction must be encapsulated. | An object for encapsulation must not be abstracted. |
63. Explain the differences between Abstract class and interface.
Abstract Class | 界面 |
Abstract Class comes with a default constructor. | The interface doesn't have a constructor. So, no further process. |
Uses both Abstract and Non-Abstract methods. | Only use Abstract methods. |
Classes that must extend for Abstract class need only abstract methods throughout their sub-class. | Classes that extend to interface must provide implementation across all the methods. |
These include instance variables. | The interface presents constants only. |
64. Explain the main differences between Array and Array List.
大批 | Array List |
The size needs to be defined for the declaring array. String[] name = new String[5] | No size requirements; and modifies dynamically. ArrayList name = new ArrayList |
You must specify an index for putting an object inside the array.![]() name[1] = “dog” | There are no index requirements.
name.add(“dog”) |
Arrays are not parameterised. | From Java 5.0 onwards, ArrayLists have a specific parameterised type. |
65. Explain the difference between static method and instance method.
Static or Class Method | Instance Method |
You must declare a method static for a static method. | All methods with declaration as static come under Instance method only. |
No requirements for creating objects in the Static method. | The object is a must for calling the instance method. |
You cannot access Instance or Non-static methods in the static context. | You can access both static and non-static in the instance method. |
66. How to make Constructors static?
Constructors invoked with the object, and static context is part of the class, not the object. Hence, constructors cannot be static and show compiler error if run or executed.
67. Explain the use of 'this' keyword in Java?
In Java, 'this' keyword represents a specific reference on the current object. There are multiple uses for this keyword for referring to the current class properties from a variable, constructors, methods, and more. You can also pass this as an argument within constructors or methods. You can also fetch this as a return value from the current class instance. You can also refer to this as a static context.
另请阅读:如何编写、编译和运行 Java 项目
68. What is a classloader in Java? What are the different types of ClassLoaders in Java?
Java Classloader's main function is to dynamically load all classes into the Java Virtual Machine (JVM). ClassLoaders are part of the JRE only. So every time we run a Java program, classloader loads the classes to execute this program. A single ClassLoader loads only a specific class on requirements and uses getClassLoader() method to specify the class. These classes are loaded by calling their names, and in case these are not found then it retrieves or throws a ClassNotFoundException or NoClassDefFoundError.
Java ClassLoader uses three principles in performing tasks with delegation, uniqueness, and visibility.
There are three different types of Java ClassLoader:
- BootStrap ClassLoader:
BootStrap ClassLoader represents the parent or superclass for extension classloader and all other classloaders. It has machine code that loads the pure first Java ClassLoader and takes classes from the rt.jar and also known as Primordial ClassLoader.
- Extension ClassLoader:
Extension ClassLoader represents the child classloader for the superclass or BootStrap ClassLoader. It loads core java classes from jre/lib/ext , ie, JDK extension library.
- System ClassLoader:
Application or System ClassLoader are further child classes of Extension ClassLoader. It takes and loads a file from the current directory for the program that you can customise with the 'classpath' switch.
69. Explain the meaning of Java Applet.
Java Applet is a program that executes or runs in the web browser only. Applets are specifically designed to function and embed with HTML web pages. Applets have the capability to function full Java applications with the entire use of Java API. JVM is a must requirement to view an applet on the browser. Applet extends with the use of java.applet.Applet class.
70. What are the types of Applets?
Based on location, there are two types of Java applets as Local Applets that are stored on the same computer or system. The Remote Applets that have files on remote systems.
71 What are immutable objects in Java?
在 Java 中,不可变对象是其状态在创建后不会改变的对象。 不可变对象非常适合允许共享线程同时避免同步的多线程应用程序。 不可变对象更适合构建简单、健全和可靠的代码以匹配有效的策略。
72. JRE(Java 运行时环境)是什么意思?
Java 运行时环境是为在机器上运行 Java 程序的最低要求提供支持的软件层。 与 JDK 和 JRE 一起,这三者构成了在特定机器上运行和开发 Java 程序的基础。
73. JDK 的一部分是什么?
Java Development Kit (JDK) 是运行 Java 程序必不可少的主要技术包之一。 它可以是 Oracle 开发的用于在 Windows、Linux 或 macOS 上构建应用程序的任何 Java 平台、标准版、微型或企业版的实现。
74. 什么是 Java 虚拟机 (JVM)?
Java 虚拟机 (JVM) 是与 JDK 和 JRE 一起运行和执行 Java 程序的三个基本要求之一。 JVM有两个主要功能; 首先,使 Java 程序能够在任何机器或系统上无缝运行,其次是优化内存以提供性能。
75.JDK、JRE、JVM有什么区别?
虚拟机 | JRE | JDK |
Java 虚拟机 | Java运行时环境 | Java 开发工具包 |
平台相关,提供多种软件和硬件选项。 | 支持在机器上运行 Java 程序的最低要求的软件层。 | 标准版 企业版 微版 |
三个概念:
| 一组在运行时为 JVM 提供支持的库 + 文件。 | JRE+开发工具 |
为执行提供运行时环境。 | JRE 代表 JVM 的实现。 | 软件开发环境。 |
76. JVM中有多少种内存区域?
JVM中有几种类型的内存区域:
- 类区:该内存存储类前结构,包括字段、池、方法数据和代码。
- 堆代表专门分配给对象的运行时内存。
- Stack 用局部变量、部分结果、线程和每个方法的帧来表示帧的内存。
- 程序计数器寄存器存储当前指令与 Java 虚拟机执行的信息。
- 本机方法堆栈存储当前应用程序中使用的所有本机方法。
77. 什么是 Java 中的数据绑定?
数据绑定表示类和方法、字段、变量、构造函数或方法体之间的连接。 Java 可以静态和动态地处理数据绑定。
78. Java中有哪些不同类型的数据绑定?
Java 中有两种重要的数据绑定类型。
- 静态绑定发生在编译时使用静态、最终和私有方法; 也称为早期绑定。
- 动态绑定在运行时呈现在编译期间不知道关于正确方法的确切信息。
79.什么是 Java Socket?
套接字有助于建立两台计算机通过 TCP 的通信机制。 理想情况下,套接字对于通信来说更加充分和灵活。
80.解释Path和Classpath的区别。
path 和 Classpath 都代表本地环境变量。 路径提供了用于定位可执行文件的软件,而 ClassPath 指定了 .class 文件在系统中的位置。
81、有没有不使用抽象类的抽象方法?
不,对于一个类中存在的抽象方法,它必须是一个抽象类。
82、Java制作只读类的过程是怎样的?
在 Java 中,您可以通过将所有字段保持私有来创建只读类。 这个特定的只读类将只有返回私有属性的 getter 方法。 它不允许修改或更改此属性,因为没有可用的 setter 方法。
1 2 3 4 5 6 7 8 9 | //Java 中的只读类 公共课学生{ //私有数据成员 私人字符串学院= “MKG” ; //研究所的getter方法 公共字符串getInstitute (){ 返回研究所; } } |
83、用Java制作只写类的过程是怎样的?
在 Java 中,您还可以通过仅实现 setter 方法将所有字段保持私有来创建只写类。
1 2 3 4 5 6 7 8 9 | // Java 中的只写类 公共课学生{ //私有数据成员 私立弦乐学院; //机构的setter方法 公共无效setInstitute (字符串学院){ 这个。 研究所=研究所; } } |
84.解释Java中访问另一个类中的类的方法?
在 Java 中,有两种方法可以访问另一个类中的类:
- 使用特定名称:我们可以通过使用限定名称或导入包含特定类的包来访问不同包中的特定类。
- 使用相对路径:同样,我们也可以使用具有特定类的包的相对路径。
85.什么是异常处理?
异常处理表示在运行时错误期间处理异常或异常情况的机制,以保持应用程序的正常流程。 存在三种不同类型的 Java 异常:已检查异常、未检查异常和错误。
86.解释Checked Exception和Unchecked Exception的区别。
- Checked Exceptions 是进一步扩展除了 RuntimeException 之外的可抛出类的类,例如 SQLException、IOException 等。Checked Exceptions 仅在编译时处理。
- Unchecked Exceptions 是扩展 RuntimeException 的类,例如 NullPointerException、ArithmeticException 等,并且在编译时不处理。
87. 异常和错误的基类是什么?
在这里,Throwable 类代表 Exception 和 Error 的基类。
88. 提及 Java 中的异常处理关键字。
Java中有五个用于处理异常的关键字:
关键词 | 描述 |
尝试 | 这个 try 块定义了用于放置执行代码的块。 这个 try 块通常后面跟着使用 catch 或 finally。 所以,它们不能单独使用。 |
抓住 | Catch 块的主要目的是处理异常。 您必须将它与 try 块结合使用,然后在后期使用 finally。 |
最后 | 最后,块检查检查执行是否完成的程序的重要代码。 |
扔 | throw 关键字的主要目的是从程序中抛出异常。 |
投掷 | throws 关键字主要用于声明异常,而不是用于抛出异常。 它提供有关异常发生的信息,并与方法签名一起应用。 |
89. 解释 finally 块的重要性。
在这里,finally 块对于程序的顺利运行至关重要。 无论是否处理异常,它总是执行。 最后,该块位于 try 或 catch 块之后。 在 JVM 中,系统总是会在终止或关闭文件之前运行 finally 块。 对于每个存在的 try 块,可以有零个或多个 catch 块,但仍然只能有一个 finally 块。
90. 在没有 catch 块的情况下可以运行 finally 块吗?
是的,finally 块可以分别在 try 或 catch 块之后运行。
91. 有没有finally块不存在的情况?
如果程序已经存在或为中止进程带来致命错误,finally 块不会运行或执行。
92. 解释 throw 和 throws 之间的主要区别。
抛出关键字 | 抛出关键字 |
它抛出一个异常。 | 它声明了一个异常。 |
已检查的异常不能仅通过 throw 传播。 | 检查的异常可以通过 throws 传播。 |
紧随其后的是一个实例。 | 紧随其后的是一堂课。 |
它仅用于方法中。 | 它与特定的方法签名一起使用。 |
不可能有多个例外。 | 而在此过程中,可以声明多个异常。 |
93. 是否有可能重新抛出异常?
是的,如果存在异常,则可以重新抛出它。
94. 解释异常传播。
处理过程中的异常过程称为异常传播。 例如,首先在堆栈顶部处理异常,然后如果未捕获,则异常下降到前一个方法,如果没有,则进一步下降,直到异常被捕获或到达底部的堆栈。 默认情况下,检查的异常没有传播。
95.解释Java中线程的含义。
在 Java 中,执行的方式或流程称为线程。 因此,每个程序都包含一个线程,称为 JVM 创建的主线程。 开发人员可以通过使用接口添加和扩展 Thread 类来定义他们的自定义线程。
96.解释线程池的含义。
Java线程池是一组连续等待分配任务的多个线程。 在这里,线程池在服务提供者下工作,服务提供者从这个池中拉出一个线程,然后为他们分配特定作业的任务。 线程池为系统增加了更多的性能和稳定性。
97.解释String和StringBuffer的区别。
细绳 | 字符串缓冲区 |
字符串类本质上是不可变的。 | 另一方面,StringBuffer 类是可变的。 |
字符串很慢。 | StringBuffer 否则相当快。 |
这些会消耗更多内存来创建新实例。 | 这些使用 concat 字符串消耗更少的内存。 |
字符串允许比较其内容,因为它覆盖了 Object 类的 equals() 方法。 | 而 StringBuffer 类不能覆盖 Object 类的 equals() 方法。 |
98.解释StringBuffer和StringBuilder的区别。
字符串缓冲区 | 字符串生成器 |
它与线程安全同步。 | 它是非同步的,对线程没有安全性。 |
在此,两个线程没有调用方法。 | 在这种情况下,两个线程可以无缝地调用方法。 |
低于或低于 StringBuilder 的效率。 | 比 StringBuffer 更高效。 |
99、Java中创建不可变类的方法是什么?
在 Java 中,您可以通过将包含所有成员的 final 类声明为 final 来创建不可变类。 让我们举个例子来理解这一点:
1 2 3 4 5 6 7 8 9 10 11 12 | 公共最终类员工{ 最终字符串 securityNumber ; 公共雇员(字符串安全编号){ 这个。 安全号码=安全号码; } 公共字符串getSecurityNumber (){ 返回安全号码; } } |
99. 什么是内部类?
Java 内部类在接口或类中定义和声明。 内部类允许系统对类和接口进行逻辑分组,使它们更具可读性和易于维护。 此外,这些类可以使用方法访问外部类的所有成员以及私有数据成员。
100. 使用Java Inner 类的主要优点和缺点是什么?
Java 内部类的主要优点包括:
- 外部类的所有成员的可访问性。
- 少写代码。
- 更多维护和可读代码。
Java 内部类的主要缺点包括:
- 来自 IDE 的支持较少。
- 大量的总类。
101.在Java编程语言中定义内部类的类型?
内部类有三种主要类型:
- 成员内部类,它使用外部方法指定类内的一个类。
- 匿名内部类,用于扩展类或指定接口的实现。
- Local Inner Class 在方法内创建一个类。
102.定义一个嵌套类。
嵌套类仅在类或接口中定义或声明。 嵌套类也可以通过方法和私有数据成员专门访问外部类的所有成员。 这是嵌套类的简单语法:
1 2 3 4 5 6 | 类Java_Outer_class { //代码 类Java_Nested_class { //代码 } } |
103.你能解释一下内部类和嵌套类的区别吗?
所有内部类都定义为非静态嵌套类。 因此,内部类只是嵌套类的一部分。
104. 你如何定义 Java 中集合的含义?
Java 中的集合是一组作为一个单元呈现的多个对象; 主要称为对象的集合。 它们也被称为集合框架或架构,为对象提供存储空间并进一步操纵设计以进行更改。
以下是 Java 集合执行的主要功能:
- 排序
- 搜索
- 插入
- 操纵
- 删除
有许多接口和类是集合的一部分。
105. 集合中有哪些接口和类?
以下是 Java 中集合可用的接口和类的列表。
- 接口: Collection、Queue、Sorted Set、Sorted Map、List、Set、Map
- 类:列表、向量、数组列表、链表
- 集:散列集、树集、链接散列集
- 映射:哈希映射、哈希表、TreeMap、链接哈希映射
- 队列:优先队列
106. 解释 Java 中关于集合的 sorted 和 ordered?
- 排序:排序允许对象组在内部或外部应用,以根据它们的不同属性在特定集合中对它们进行排序。
- 有序:定义基于集合中添加的值排序的值,并以特定顺序对其进行迭代。
107. 集合中有哪些不同的列表?
根据允许重复的索引位置列出存储值。 以下是列表的主要类型:
数组列表:使用随机访问接口,提供按索引排序的集合,不排序,并提供快速迭代。 这是一个理解这一点的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 公共类水果{ 公共静态无效主要(字符串[ ]参数){ ArrayList < String >名称= new ArrayList < String >(); 名字。 添加( “苹果” ); 名字。 添加( “鳄梨” ); 名字。 添加( “樱桃” ); 名字。 添加( “猕猴桃” ); 名字。 添加( “橙子” ); 名字。 添加( “香蕉” ); 名字。 添加( “猕猴桃” ); 系统。 出来。 println (名称); } } |
输出如下:
[苹果、鳄梨、樱桃、猕猴桃、橙子、香蕉、猕猴桃] |
通过输出,您可以检查 Array List 是否保持原始插入顺序并允许重复。 虽然没有排序。
Vector:也使用随机访问方法,是同步的,并提供对线程安全的支持。
让我们通过一个例子来理解这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 公共类水果{ 公共静态无效主要(字符串[ ]参数){ ArrayList < String > names = newvector < String >(); 名字。 添加( “猕猴桃” ); 名字。 添加( “橙子” ); 名字。 添加( “香蕉” ); 名字。 添加( “苹果” ); 名字。 添加( “鳄梨” ); 名字。 添加( “樱桃” ); 名字。 添加( “猕猴桃” ); 系统。 出来。 println (名称); } } |
输出如下:
[猕猴桃、橙子、香蕉、苹果、鳄梨、樱桃、猕猴桃] |
向量列表遵循原始插入顺序,也支持重复。
链表:也是删除和插入的理想选择,元素是双链的,但性能慢。
链表示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 公共类水果{ 公共静态无效主要(字符串[ ]参数){ ArrayList < String > names = newvector < String >(); 名字。 添加( “猕猴桃” ); 名字。 添加( “橙子” ); 名字。 添加( “香蕉” ); 名字。 添加( “苹果” ); 名字。 添加( “鳄梨” ); 名字。 添加( “樱桃” ); 名字。 添加( “猕猴桃” ); 系统。 出来。 println (名称); } } |
输出如下:
[苹果、鳄梨、樱桃、猕猴桃、橙子、香蕉、猕猴桃] |
它还遵循原始插入顺序并接受重复项。
108. Java中的collection和collection的主要区别是什么?
主要区别如下:
- 集合表示一个接口,而 Collections 只是类。
- Collection 接口提供了多种功能,用于将数据结构化为 List、Set 和 Queue。 而 Collection 类的主要目的仅限于对集合的元素进行排序和同步。
109. 解释优先队列。
Priority Queue 定义了用于处理链表的队列接口,目的是实现 Priority-in 和 Priority-out。 队列一般遵循先进先出(FIFO)算法,您仍然可以根据具体要求对元素进行排队,然后我们可以实现 PriorityQueue 进行定制。 使用优先级队列,它自然地或通过比较器的相对优先级取决于优先级堆。
110、什么时候使用和比较Java中的Runnable接口比较理想?
当我们需要用其他类而不是线程来扩展一个类时,可运行接口是一个理想的选择。
111.线程类的start()和run()方法有什么区别?
start() 方法添加并创建一个新线程。 run() 方法中的代码仅在新线程中执行。 而 run() 方法只会在当前线程中执行代码。
112.什么是多线程?
在Java中,我们可以同时执行多个线程,这就是所谓的多线程。 它有助于程序进行多任务处理,同时占用更少的内存并提供更高的性能。 在多线程中,线程是轻量级的,共享相同的空间,并且在各个方面都相当实惠。
113.解释进程和线程的区别。
这里的主要区别是:
- 正在执行的 Java 程序称为进程,而线程仅代表进程的子集。
- 进程代表内存中的不同空间,而线程具有相同的地址。
- 进程是完全独立的,而线程只是进程的一部分。
- 进程间通信慢,而线程间通信快。
114.解释线程间通信的含义。
线程间通信被定义为允许多个同步线程之间通信的进程。 它的主要目的是避免 Java 中的线程池。 通信是通过wait()、notify()和notifyAll()方法实现的。
115.解释wait()方法。
使用 wait() 方法,您可以允许线程处于等待阶段,而另一个线程被锁定在对象上。 因此,wait() 方法可以为线程增加显着的等待时间。
以下是表示这一点的语法:
1 2 3 4 5 6 | 公共静态无效主要(字符串[]参数){ 线程 t =新线程(); 吨。 开始(); 同步( t ) { 等待(); } |
116、Java中notify()和notifyAll()方法的主要区别是什么?
notify() 方法发送一个信号以仅唤醒等待池中的特定线程,而 notifyAll() 唤醒池中等待阶段的所有线程。
117.定义sleep()和wait()的主要区别。
Sleep() 通过在不释放锁的情况下暂停执行特定持续时间来暂停或停止当前线程进度。 而 wait() 在调用 notify() 方法以便稍后唤醒后会导致线程等待持续时间。
118. 解释与 Java 中的线程相关的 join() 方法。
join() 方法允许将一个线程与连续线程之一结合起来。 这是 join() 方法的语法:
1 2 3 4 5 | 公共静态无效主要(字符串[]参数){ 线程 t =新线程(); 吨。 开始(); 吨。 加入(); } |
119.解释Thread的Yield方法。
Yield 方法是一种静态方法,不会释放线程中的任何锁。 在这里,Yield() 方法将当前线程授权给更可运行的线程,同时允许其他线程保持执行。 因此,同等线程优先级的线程可以定期运行。
120.什么是饥饿阶段?
饥饿是线程无法访问共享资源并且无法取得任何进展的阶段。
121.什么是线程死锁?
死锁定义了两个或多个线程在等待对方时永远被阻塞的阶段。
122.在Java中定义序列化和反序列化?
序列化是将对象的状态转换为非常适合 JPA、JMS、RMI、JPA 和 Hibernate 技术的特定字节流的过程。 而将字节流更改为对象的相反过程称为反序列化。 这两个过程都是平台无关的,因此它们允许您在一个平台上序列化并有效地反序列化到一个完全不同的平台。
123.瞬态变量的重要性是什么?
瞬态变量的重要性在于设置为默认变量而不与静态变量一起使用的反序列化。
124.什么是volatile变量?
易失性变量在避免线程缓存内存的同时,在同步和读取主内存中起着至关重要的作用。
125.什么是SerialVersionUID?
在序列化过程中,对象被标记为相应对象类的特定版本 ID 号。 这个数字被称为 SerialVersionUID,在反序列化过程中的验证中起着至关重要的作用,分别检查发送方和接收方的兼容性。
126、Java中克隆对象的过程是怎样的?
使用对象克隆,您可以创建原始对象的精确副本。 为了使克隆成为可能,一个类必须支持使用 java.lang.Cloneable 接口进行克隆,并允许覆盖原始对象类的 clone() 方法。
这里是 clone() 方法的简单语法:
受保护的对象 clone() 抛出 CloneNotSupportedException |
如果克隆没有实现它,那么它通常会抛出带有“CloneNotSupportedException”的异常。
127.为每个类定义保持超类的类?
对象类。
128.定义一个字符串类是可变的还是不可变的?
String 类代表一个不可变的状态。 因此,一旦创建了一个对象,就不能再改变了。
129.如何区分StringBuffer和StringBuilder类?
- StringBuilder 比 StringBuffer 快。
- StringBuffer 已同步,而 StringBuilder 未同步。
- StringBuffer 提供了一个线程安全的环境,而 StringBuilder 没有线程安全的能力。
130、Java中toString()方法有什么用?
在 Java 中,toString() 从任何对象中检索或返回字符串表示。
131、什么是Java中的垃圾回收?
当对象通过运算符动态分配时,Java 系统还会自动处理内存的释放,以防在很长一段时间内没有对对象的引用。 这种保持系统没有无用对象的过程在 Java 中称为垃圾收集。 垃圾收集的主要目的是使其更有效地管理内存。
132.垃圾收集器为特定对象调用finalize()方法的次数是多少?
您只能在垃圾收集中调用 finalize() 方法一次。
133.定义调用垃圾收集的方式。
有两种调用垃圾收集的方法:
- 系统.gc()
- Runtime.getRuntime().gc()
134.我们可以强制垃圾收集吗?
不,这是一个自动过程。 您可以调用垃圾收集方法,但不能强制它。 尽管如此,它并不能保证它会是完整的。
135. Java中有哪些不同的数据类型? 解释。
以下是帮助您处理数据类型的候选清单:
- 字节 – 8 位
- 短 – 16 位
- char – 16 位 Unicode
- int – 32 位(整数)
- float – 32 位(实数)
- long – 64 位(单精度)
- double – 64 位(双精度)
136. 定义统一码。
Unicode 是在人类语言中定义国际字符的一种方式,Java 使用这种 Unicode 结构来符号化字符。
137. 定义字面量。
文字是分配给特定变量的常量值
// 这里 105 是一个字面量 整数 = 105 |
138.在Java中定义类型转换?

在将一种数据类型的值分配给另一种数据类型的情况下,这两者可能兼容也可能不兼容,需要转换。 如果数据类型兼容,Java 会自动转换。 而如果数据类型不兼容,则必须强制转换才能成功转换。 强制转换有两种基本类型:隐式和显式。
139.解释两种不同类型的类型转换?
- 隐式:定义将值从较小数据类型存储到较大数据类型,仅由编译器执行。
- 显式:定义将较大数据类型中的值存储到可能导致信息丢失的较小数据类型中。
结论
以上Java面试题将为准备面试提供一个良好的开端。 不过,也要练习你的编码技能,并确保对这些问题及其相关概念进行透彻,这样当面试官发出 Q 时,你就可以用你的 A 赢得一轮了。哦,别忘了 3当你在面试官面前展示自己时(不显眼的)呼吸。
如果您有兴趣了解有关 Java、全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的软件开发执行 PG 计划——全栈开发专业化,专为工作专业人士设计,提供 500 多个小时的严格培训, 9+ 项目和任务,IIIT-B 校友身份,实用的实践顶点项目和顶级公司的工作协助。
一切顺利! 希望你能完成你的面试!!