Java企业面试题4
1.异常的概述
- 什么是异常?
指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。
- 异常的抛出机制
Java中把不同的异常用不同的类表示,一旦发生某种异常,就`创建该异常类型的对象`,并且抛出(throw)。
然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)这个异常对象,那么这个异常对象将会导致程序终止。
- 如何对待异常
对于程序出现的异常,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是程序员在编写程序时,
就充分考虑到各种可能发生的异常和错误,极力预防和避免。实在无法避免的,要编写相应的代码进行异常的检测、以及`异常的处理`,保证代码的`健壮性`。
2.异常的体系结构及常见的异常
java.lang.Throwable:异常体系的根父类
|---java.lang.Error:错误。Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。
一般不编写针对性的代码进行处理。
|---- StackOverflowError、OutOfMemoryError|---java.lang.Exception:异常。我们可以编写针对性的代码进行处理。
|----编译时异常:(受检异常)在执行javac.exe命令时,出现的异常。
|----- ClassNotFoundException
|----- FileNotFoundException
|----- IOException
|----运行时异常:(非受检异常)在执行java.exe命令时,出现的异常。
|---- ArrayIndexOutOfBoundsException
|---- NullPointerException
|---- ClassCastException
|---- NumberFormatException
|---- InputMismatchException
|---- ArithmeticException
3.说说你在开发中常见的异常都有哪些?
|----编译时异常:(受检异常)在执行javac.exe命令时,出现的异常。
|----- ClassNotFoundException
|----- FileNotFoundException
|----- IOException
|----运行时异常:(非受检异常)在执行java.exe命令时,出现的异常。
|---- ArrayIndexOutOfBoundsException
|---- NullPointerException
|---- ClassCastException
|---- NumberFormatException
|---- InputMismatchException
|---- ArithmeticException
4.异常处理的方式
过程1:“抛”
>"自动抛" : 程序在执行的过程当中,一旦出现异常,就会在出现异常的代码处,自动生成对应异常类的对象,并将此对象抛出。>"手动抛" :程序在执行的过程当中,不满足指定条件的情况下,我们主动的使用"throw + 异常类的对象"方式抛出异常对象。
过程2:“抓”
狭义上讲:try-catch的方式捕获异常,并处理。
广义上讲:把“抓”理解为“处理”。则此时对应着异常处理的两种方式:① try-catch-finally ② throws
5.Java的异常体系简单介绍下(网*)
Java的异常体系主要分为两大类:
Error
和Exception
。Error
指的是严重的错误,通常由JVM内部错误或者资源耗尽引起,应用程序无法处理。Exception
是程序可以处理的异常情况,又分为检查型异常(checked exceptions)和非检查型异常(unchecked exceptions)。检查型异常在编译时需要显式处理,而非检查型异常则包括运行时异常(RuntimeException及其子类)和错误(Error及其子类)。
6.Java异常处理机制(*科软)
- Java通过try、catch、finally和throw关键字来处理异常。try块中放置可能抛出异常的代码,catch块用来捕获并处理特定类型的异常,finally块无论是否捕获到异常都会执行,通常用于清理资源。throw用于手动抛出异常。
7.异常的两种类型,Error和Exception的区别(上海冠*新创、北京中**译、*度)
Error
是严重的问题,通常与代码无关,由系统资源不足、约束失败等引起,应用程序不应尝试捕获这些错误。Exception
是程序可以处理的异常情况,分为检查型异常和非检查型异常。检查型异常需要在编译时处理,非检查型异常(如运行时异常)则不需要。
8.运行时异常与一般异常有何异同?(华*思为)
- 运行时异常(unchecked exceptions)通常由程序逻辑错误引起,如
NullPointerException
、ArrayIndexOutOfBoundsException
等,它们继承自RuntimeException
。检查型异常(checked exceptions)则需要在编译时显式处理,如IOException
、SQLException
等。
9.说几个你常见到的异常(华油**普)
- 常见的异常包括
NullPointerException
、ArrayIndexOutOfBoundsException
、ClassCastException
、IOException
、SQLException
等。
10.说说final、finally、finalize的区别
final
可以用来修饰类、方法和变量。被final
修饰的类不能被继承,方法不能被重写,变量(成员变量或局部变量)则不能被重新赋值。finally
是异常处理的一部分,与try-catch配合使用,无论是否捕获到异常,finally块中的代码都会执行。finalize
是Object类的一个方法,在垃圾收集器执行时会调用被回收对象的finalize()方法。
11.如果不使用try-catch,程序出现异常会如何?
- 如果不使用try-catch处理异常,当异常发生时,程序会立即终止,并打印出异常的堆栈跟踪信息。
12.try ... catch捕捉的是什么异常?
- try-catch可以捕捉
Exception
及其子类的实例。具体捕捉哪个异常类型,由catch块中声明的异常类型决定。
13.如果执行finally代码块之前方法返回了结果或者jvm退出了,这时finally块中的代码还会执行吗?(恒*电子)
- 是的,finally块中的代码总会被执行,即使在方法返回之前或JVM退出时。
14.在try语句中有return语句,最后写finally语句,finally语句中的code会不会执行?何时执行?如果执行是在return前还是后(拓*思、华**为)
- finally块中的代码会在return之前执行。即使try块中有return语句,控制权也会传递给finally块执行其中的代码。
15.捕获异常在catch块里一定会进入finally吗?catch里能return吗?catch里return还会进finally吗?在try里return是什么情况?(*蓝)
- catch块之后总是会进入finally块。
- catch块中可以有return语句。
- 如果catch块中有return语句,在执行return之前会先进入finally块。
- 在try块中的return会在执行前先进入finally块。
16.throw和throws的区别?(北京亿**方、北京新*阳光)
- throw是用来抛出一个具体的异常实例。
- throws用来声明一个方法可能会抛出哪些异常类型。
17.如何自定义一个异常?
- Exception或RuntimeException等,并根据需要添加构造函数和其他成员方法。自定义异常应该提供足够的信息以帮助诊断问题。
原文地址:https://blog.csdn.net/m0_74972727/article/details/142360344
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!