异常相关面试题

1、java中的异常继承体系及常见运行时异常

Throwable类是所有异常或错误的超类,它有两个子类:ErrorException,分别表示错误异常。其中异常Exception 分为运行时异常(RuntimeException)和编译时异常
Error:一般是指 java 虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误。
Exception 异常又分为两种:
Exception:编译时异常,如果异常不处理,则代码无法编译。
RuntimeException:运行时异常,运行时发生,无需处理,对代码进行修改解决问题。 常
见的运行时异常:
1、NullPointerException:空指针异常,调用了未经初始化的对象或者是不存在的对象。
2、ClassNotFoundException :指定的类不存在,这里主要考虑一下类的名称和路径是否正确即可 。
3、ArrayIndexOutOfBoundsException :数组下标越界异常,对数组时操作,调用的下标超过了数组的范围。
4 、NoSuchMethodException:方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。
5、FileNotFoundException:文件未找到异常,进行 IO 操作时,访问的文件不存在。



2、异常的解决方式

1、throws:throws 来告知调用程序此方法可能会抛出的异常,但是不会处理。调用方法可能会处理这些异常,或者同样用 throws 来将异常传给上一级调用方法。throws 关键字后可接多个潜在异常类名
2、try-catch:try-catch 块捕获处理异常。在 try 代码块中,包含可能发生异常的代码,一旦发生异常,则抛出异常对象,会进入 catch 代码块,一个 try 块之后可以有多个 catch 子句,try-catch 块也能嵌套。每个 catch 块必须接受一个(且仅有一个)代表异常类型的异常对象参数,若 try 中抛出的异常和 catch 接收的异常类型一致,则进入对应的 catch 代码块。
3、try-catch 可以和 finally 结合使用,finally 代码块肯定会执行



3、throw 和 throws 的区别

throw 语句用在方法体内,表示抛出异常对象,由方法体内的语句处理。
throws 语句用在方法声明后面,表示抛出异常,由该方法的调用者来处理。
throws 主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw 是当程序出现某种逻辑错误时主动抛出一个异常实例。
throw 与 throws 的比较
1、throws 出现在方法函数头;而 throw 出现在函数体
2、throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行 throw 则一定抛出了某种异常对象。
3、两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
举例:throws

public static void write() throws FileNotFoundException
{ FileInputStream fileInputStream=new FileInputStream("c");
}

throw

String s = "abc";
if (s.equals("abc")) {
throw new NumberFormatException();
}



4、常见的异常

NullPointerException空指针异常
ClassNotFoundException指定类不存在
NumberFormatException字符串转换为数字异常
IndexOutOfBoundsException数组下标越界异常
ClassCastException数据类型转换异常
FileNotFoundException文件未找到异常
NoSuchMethodException 方法不存在异常
IOException IO异常
SocketException Socket 异常



5、try-catch-finally 中哪个部分可以省略

try-catch-finally 其中 catchfinally都可以被省略,但是不能同时省略,也就是说有 try 的时候,必须后面跟一个 catch 或者 finally。


6、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗

finally 一定会执行,即使是 catch 中 return 了,catch 中的 return 会等 finally 中的代码执行完之后,才会执行


7、final、finally、finalize 的区别

final:是修饰符,如果修饰,此类不能被继承;修饰方法,方法不能被重写;修饰变量,变量为常量,只能赋值 一次。
finally:是 try{} catch{} finally{} 最后一部分,表示不论发生任何情况都会执行,finally 部分可以省略,但如果finally 部分存在,则一定会执行 finally 里面的代码
finalize: 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值