【8】进大厂必须掌握的面试题-Java面试-异常和线程
Q1。错误和异常有什么区别?
错误是在运行时发生的不可恢复的情况。如OutOfMemory错误。这些JVM错误无法在运行时修复。尽管可以在catch块中捕获错误,但是应用程序的执行将停止并且无法恢复。
而异常是由于输入错误或人为错误等原因而发生的情况。例如,如果指定的文件不存在,则将抛出FileNotFoundException。否则,如果尝试使用null引用,则会发生NullPointerException。在大多数情况下,有可能从异常中恢复(可能是通过向用户提供输入正确值的反馈等)。
Q2。您如何处理Java异常?
Java中有五个关键字用于处理异常:
- try
- catch
- finally
- throw
- throws
Q3。Checked Exception和Unchecked Exception有什么区别?
检查异常
- 扩展Throwable类的类(RuntimeException和Error除外)被称为检查异常。
- 被检查的异常在编译时被检查。
- 示例:IOException,SQLException等。
未经检查的异常
- 扩展RuntimeException的类称为未检查的异常。
- 未检查的异常不会在编译时检查。
- 例如:ArithmeticException,NullPointerException等。
Q4。关键字final,finally和finalize有什么目的?
final:**
Final用于对类,方法和变量施加限制。不能继承final类,不能覆盖final方法,并且不能更改final变量值。让我们看下面的示例,以更好地理解它。
class FinalVarExample {
public static void main( String args[]){
final int a=10; // Final variable
a=50; //Error as value can't be changed
}
}
finally
最后用于放置重要代码,无论是否处理异常,都将执行该代码。让我们看下面的示例,以更好地理解它。
class FinallyExample {
public static void main(String args[]){
try {
int x=100;
}catch(Exception e) {
System.out.println(e);
}finally {
System.out.println("finally block is executing");
}
}
}
finalize
Finalize用于在垃圾回收之前就执行清理处理。让我们看下面的示例,以更好地理解它。
class FinalizeExample {
public void finalize() {
System.out.println("Finalize is called");
}
public static void main(String args[]){
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1= NULL;
f2=NULL;
System.gc();
}
}
Q5。throw和throws有什么区别?
| throw | throws |
|---|---|
| 引发用于显式引发异常。 | 引发用于声明异常。 |
| 已检查的异常不能仅通过throw传播。 | 可以使用throws传播检查的异常。 |
| 引发后跟一个实例。 | 投掷之后是上课。 |
| 在方法中使用了throw。 | 抛出与方法签名一起使用。 |
| 您不能抛出多个异常 | 您可以声明多个异常,例如public void method()引发IOException,SQLException。 |
Q6。什么是Java中的异常层次结构?
层次结构如下:
Throwable是所有Exception类的父类。异常有两种类型:检查的异常和UncheckedExceptions或RunTimeExceptions。两种类型的异常都扩展了Exception类,而错误又进一步分为虚拟机错误和断言错误。
Q7。如何创建自定义异常?
要创建您自己的异常,请扩展Exception类或其任何子类。
- class New1Exception extends Exception {} //这将创建Checked Exception
- 类NewException扩展了IOException {} //这将创建Checked异常
- 类NewException扩展了NullPonterExcpetion {} //这将创建UnChecked异常
Q8。Java异常类的重要方法有哪些?
异常及其所有子类均未提供任何特定方法,并且所有方法均在基类Throwable中定义。
- String getMessage() –此方法返回Throwable消息字符串,并且可以在通过其构造函数创建异常时提供该消息。
- String getLocalizedMessage()–提供此方法,以便子类可以重写它以向调用程序提供特定于语言环境的消息。此方法的可抛出类实现仅使用getMessage()方法即可返回异常消息。
- Synchronized Throwable getCause() –此方法返回异常原因,或者返回null id,原因未知。
- String toString() –此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类的名称和本地化消息。
- void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以传递PrintStream或PrintWriter作为参数,以将堆栈跟踪信息写入文件或流。
Q9。进程和线程之间有什么区别?
| Process | Thread | |
|---|---|---|
| 定义 | 程序的执行实例称为进程。 | 线程是进程的子集。 |
| 通讯 | 进程必须使用进程间通信与同级进程进行通信。 | 线程可以直接与其进程中的其他线程通信。 |
| 控制 | 进程只能控制子进程。 | 线程可以对同一进程的线程行使相当大的控制权。 |
| 变化 | 父进程中的任何更改都不会影响子进程。 | 主线程中的任何更改都可能影响该进程其他线程的行为。 |
| 记忆 | 在单独的内存空间中运行。 | 在共享内存空间中运行。 |
| 受控制于 | 进程由操作系统控制。 | 线程由程序中的程序员控制。 |
| 依存关系 | 流程是独立的。 | 线程是依赖的。 |
Q10。什么是finally块?有没有什么情况下最终将不会执行?
最终块是始终执行一组语句的块。它始终与try块相关联,无论是否发生任何异常。
是的,如果程序通过调用System.exit()或导致致命错误(导致进程中止)退出,则最终将不会执行。
Q11。什么是同步?
同步是指多线程。同步的代码块一次只能由一个线程执行。由于Java支持执行多个线程,因此两个或多个线程可以访问相同的字段或对象。同步是使所有并发线程在执行中保持同步的过程。同步避免了由于共享内存视图不一致而导致的内存一致性错误。当一个方法被声明为已同步时,线程将保持该方法对象的监视器。如果另一个线程正在执行同步方法,则该线程将被阻塞,直到该线程释放监视器。

Q12。我们可以在单个try块下写入多个catch块吗?
是的,我们可以在单个try块下包含多个catch块,但是方法应从特定到一般。让我们通过一个编程示例来理解这一点。
public class Example {
public static void main(String args[]) {
try {
int a[] = new int[10];
a[10] = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Arithmetic exception in first catch block");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array index out of bounds in second catch block");
} catch (Exception e) {
System.out.println("Any exception in third catch block");
}
}
}
Q13。Java异常类的重要方法有哪些?
方法在基类Throwable中定义。Java异常类的一些重要方法如下所述。
- String getMessage() –此方法返回有关异常的消息String。可以通过其构造函数提供消息。
- public StackTraceElement [] getStackTrace()–此方法返回一个数组,其中包含堆栈跟踪中的每个元素。索引0处的元素表示调用堆栈的顶部,而数组中的最后一个元素表示调用堆栈底部的方法。
- 同步的Throwable getCause() –此方法返回Throwable对象表示的异常原因或null ID。
- String toString() –此方法以String格式返回信息。返回的字符串包含Throwable类的名称和本地化消息。
- void printStackTrace() –此方法将堆栈跟踪信息打印到标准错误流。
Q14。什么是Java中的OutOfMemoryError?
OutOfMemoryError是java.lang.Error的子类,通常在我们的JVM内存不足时发生。
Q15。什么是线程?
线程是可以由调度程序独立执行的最小编程指令。在Java中,所有程序都将至少具有一个线程,该线程称为主线程。当程序开始执行时,此主线程由JVM创建。主线程用于调用程序的main()。
Q16。创建线程的两种方法是什么?
在Java中,可以通过以下两种方式创建线程:
- 通过实现Runnable接口。
- 通过扩展线程
Q17。Java中有哪些不同类型的垃圾收集器?
Java中的垃圾收集程序,可以帮助进行隐式内存管理。由于在Java中,可以使用new关键字动态创建对象,一旦创建对象,该对象将消耗一些内存。一旦工作完成,并且不再有对象的引用,使用垃圾回收的Java将破坏该对象并释放其占用的内存。Java提供了四种类型的垃圾收集器:
- 串行垃圾收集器
- 并行垃圾收集器
- CMS垃圾收集器
- G1垃圾收集器
【8】进大厂必须掌握的面试题-Java面试-异常和线程的更多相关文章
- 【5】进大厂必须掌握的面试题-Java面试-spring
spring面试问题 Q1.什么是spring? Spring本质上是一个轻量级的集成框架,可用于用Java开发企业应用程序. Q2.命名Spring框架的不同模块. 一些重要的Spring Fram ...
- 【4】进大厂必须掌握的面试题-Java面试-jdbc
1.什么是JDBC驱动程序? JDBC驱动程序是使Java应用程序与数据库进行交互的软件组件.JDBC驱动程序有4种类型: JDBC-ODBC桥驱动程序 本机API驱动程序(部分为Java驱动程序) ...
- 【7】进大厂必须掌握的面试题-Java面试-Jsp
1. jsp的生命周期方法是什么? 方法 描述 公共无效的jspInit() 与servlet的init方法相同,仅被调用一次. 公共无效_jspService(ServletRequest requ ...
- 【9】进大厂必须掌握的面试题-DevOps面试
Q1.DevOps和Agile之间的根本区别是什么? 下表中列出了两者之间的差异. 特征 DevOps--开发运维 Agile--敏捷 敏捷 开发和运营中的敏捷性 只有发展才能敏捷 流程/实践 涉及C ...
- 【16】进大厂必须掌握的面试题-100个python面试
我们整理了Python面试的主要问题清单,分为7个部分: 基本面试问题 OOPS面试问题 基本的Python程序 Python库面试问题 数据分析面试题 选择题(MCQ) 基本的Python面试问题 ...
- 【17】进大厂必须掌握的面试题-50个Angular面试
我们整理了一份主要的Angular面试问题清单,分为三部分: 角度面试问题–初学者水平 角度面试问题–中级 角度面试问题–高级 初学者水平–面试问题 1.区分Angular和AngularJS. 特征 ...
- 【18】进大厂必须掌握的面试题-15个Kafka面试
1.什么是Kafka? Wikipedia将Kafka定义为"由 Scala编写的Apache软件基金会开发的开源消息代理项目 ,并且是一个分布式的发布-订阅消息系统. 特征 描述 高吞吐量 ...
- 面试题-Java基础-异常部分
1.Java中的两种异常类型是什么?他们有什么区别? Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常.不受检查的异常不需要在方法或者是构造函数上声明,就算方 ...
- =面试题:java面试基本方向 背1 有用 项目二技术学完再看
一.Java基础 1. 集合框架A)集合中泛型优点? 将运行期的ClaasCastException 转到编译期异常. 泛型还提供通配符 1)HashMap---允许一个键为null,允许多个值为n ...
随机推荐
- WinDbg排查CPU高的问题
一.概述 在Window服务器部署程序后,可能因为代码的不合理或者其他各种各样的问题,会导致CPU暴增,甚至达到100%等情况,严重危及到服务器的稳定以及系统稳定,但是一般来说对于已发布的程序,没法即 ...
- selenium中各个模块操作:下拉框、鼠标悬浮连贯、拼图拖拽操作、以及其他拖拽操作、连线操作
1.下拉框的修改操作 方法一:定位到元素后,通过select选择对应的值 方法二:通过两次点击的方法:没有select的value属性时,采用click两次的方法去选择: click第一次后,出现下拉 ...
- Python中的相对路径的表示方法
2020/6/3 举例: 现在 6-2.py 想使用 /data/lastfm-2k/user_artists.dat 因为 6-2.py 和 data 是同一级目录,所以正确的写法应该是:
- Java学习预热
预备知识 什么是计算机 点击进入百度百科(计算机) 计算机硬件组成 主要部件 CPU 内存 主板 IO设备 键盘 鼠标 麦克风 显示器 音箱 冯·诺依曼体系结构 计算机软件 系统软件 DOS wind ...
- 关于java for循环常见练习题
使用for循环方式计算2+4+6+…+100的值 package day02; /** * 使用for循环方式计算2+4+6+…+100的值 * @author mu * */ public clas ...
- Java操作Elasticsearch 之 [Java High Level REST Clientedit]
1. 简述 Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json. 向 Ela ...
- windows提权之mimikatz
mimikatz privilege::debug #提权命令 sekurlsa::logonPasswords #抓取密码 winmine::infos #扫雷作弊 lsadump::lsa /pa ...
- Appium 用途和特点
Appium 是一个移动 App (手机应用)自动化工具. 手机APP 自动化有什么用? 自动化完成一些重复性的任务 比如微信客服机器人 爬虫 就是通过手机自动化爬取信息. 为什么不通过网页.HTTP ...
- 花时三月 终于Spring Boot 微信点餐开源系统! 附源码
架构 前后端分离: Nginx与Tomcat的关系在这篇文章,几分钟可以快速了解: https://www.jianshu.com/p/22dcb7ef9172 补充: set ...
- Dominate【操作系统的经典算法】
此篇文章我们来谈一谈操作系统中都出现过哪些算法,请欣赏下图 ↓ 进程和线程管理中的算法 进程和线程在调度时候出现过很多算法,这些算法的设计背景是当一个计算机是多道程序设计系统时,会频繁的有很多进程或者 ...