此异常最初是在此调用堆栈中引发的:_【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垃圾收集器
往期推荐
【7】进大厂必须掌握的面试题-Java面试-Jsp
【6】进大厂必须掌握的面试题-Hibernate
【5】进大厂必须掌握的面试题-Java面试-spring
【4】进大厂必须掌握的面试题-Java面试-jdbc
此异常最初是在此调用堆栈中引发的:_【8】进大厂必须掌握的面试题Java面试异常和线程...相关推荐
- 异常“本机框架位于调用堆栈顶部,因此无法计算表达式的值”的解决办法
异常:本机框架位于调用堆栈之上,无法计算表达式的值 原因: 如果使用 Response.End.Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbo ...
- kotlin调用类中的方法_一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用
kotlin调用类中的方法 by Oleksii Fedorov 通过Oleksii Fedorov 一种轻松的方法来测试Kotlin中令人沮丧的静态方法调用 (A stress-free way t ...
- java调用项目中的文件_详解eclipse项目中.classpath文件的使用
1 前言 在使用eclipse或者myeclipse进行java项目开发的时候,每个project(工程)下面都会有一个.classpath文件,那么这个文件究竟有什么作用? 2 作用 .classp ...
- lua 调用文件中的函数调用_四、C++获得Lua的变量和Table的值
上两篇文章都已经把Lua和C++函数的调用讲完了,这篇开始讲变量和Table的调用. 这篇文章主要是讲C++怎么调用获得Lua中的变量和Table的值,并且把lua中的值打印出来. 一.直接上代码: ...
- driver.get调用iframe中的页面_【5分钟玩转Lighthouse】爬取JavaScript动态渲染页面
0x00 背景概述 通过[技术干货 007 | Scrapy爬虫初探]教程,大家应该已经对如何编写爬虫有了一定的认识.但对于较为复杂的网站设计,比如网站页面使用了JavaScript动态渲染,入门级的 ...
- lua 调用文件中的函数调用_深入Lua:调用相关的指令
前言 这一节我们来深入解析与调用相关的指令,这些指令是: OP_CALL 调用 OP_TAILCALL 尾调用 OP_VARARG 可变参数 OP_RETURN 返回 解析这些指令的过程中,最重要的是 ...
- 多线程调用同一个对象的方法_这一次,让我们完全掌握Java多线程(2/10)
多线程不仅是Java后端开发面试中非常热门的一个问题,也是各种高级工具.框架与分布式的核心基石.但是这个领域相关的知识点涉及到了线程调度.线程同步,甚至在一些关键点上还涉及到了硬件原语.操作系统等更底 ...
- 外部如调用layui中的组件_详解layui.layer独立组件
layer至今仍作为layui的代表作,她的受众广泛并非偶然,而是这五年多的坚持,不断完善和维护.不断建设和提升社区服务,使得猿们纷纷自发传播,乃至于成为今天的Layui最强劲的源动力. 目前,lay ...
- 最大调用堆栈大小超出错误
我正在使用Direct Web Remoting(DWR)JavaScript库文件,并且仅在Safari(台式机和iPad)中出现错误 它说 超出最大呼叫堆栈大小. 该错误的确切含义是什么,它会完全 ...
最新文章
- Shell test 命令
- matlab最大化函数,求助,最大化一个函数
- 波士顿动力机器狗测评来了!售价堪比豪车,避障、导航、舞蹈样样都行,买不起还能租...
- python前缀表达式求值_python数据结构与算法 11 后缀表达式求值
- 全民Tv帝师称称通过EOS赚了几千万,可信度有多高
- 最大公约数之和——极限版II
- 改善深层神经网络:超参数调整、正则化以及优化——2.5 指数加权平均的偏差修正
- STM32使用PWM输入模式测试频率和占空比
- Java回调方法详解
- WebStorm设置自动刷新
- 【软件体系结构】考点整理
- 随机矩阵(stochastic matrix)与 PageRank
- 如何去掉图片上的文字?
- 微信不显示王者荣耀连接服务器,王者荣耀省级不显示,王者荣耀不用微信怎么登录...
- Tensorflow进阶
- STC89C51单片机
- 傅里叶Fourier变换fft-python-scipy-幅值-辐角-相位(二)
- ubuntu解决微信无法输入中文
- 解决时间机器无法识别硬盘问题
- 自动矢量化编译优化技术(Automatic Vectorization)
热门文章
- Smoothing滤波处理halcon算子,持续更新
- 伺服驱动器的 三环控制 电流环 速度环 位置环
- 图像坐标:我想和世界坐标谈谈(B)
- 深度学习基础(四)优化函数(梯度下降函数)
- 原型模式 java 深浅_JAVA设计模式---原型模式--浅客隆和深克隆
- 32位md5解密_冰蝎特征检测及报文解密
- android ndk调用出错,由于Android-NDK应用程序的权限问题,为什么fopen在本地方法中失败?...
- 第2章 Python 数字图像处理(DIP) --数字图像基础1 - 视觉感知要素 - 亮度适应与辨别
- 在linux上安装jdk(转载)
- app后端设计(php)