java中十大异常_有关Java异常的十大问题

前阵子在复习的时候,综合了优锐课的学习笔记,对基础知识进行了一个整理的概括。特总结了有关Java异常的十大常见问题。码了很多专业的相关知识, 分享给大家参考学习。

1.已检查与未检查

简而言之,必须在方法中显式捕获已检查的异常,或在方法的throws子句中声明该异常。未检查的异常是由无法解决的问题引起的,例如被零除,空指针等。检查的异常特别重要,因为你希望使用API​​的其他开发人员知道如何处理异常。

例如,IOException是一个常用的已检查异常,而RuntimeException是一个未检查的异常。你可以在阅读其余内容之前先检查一下Java异常层次结构图。

2.异常管理的最佳实践

如果可以正确处理异常,则应将其捕获,否则应将其引发。

3.为什么在try中定义的变量不能用于catch或final?

在以下代码中,在try块中声明的字符串s不能在catch子句中使用。该代码不通过编译。

try {

File file = new File("path");

FileInputStream fis = new FileInputStream(file);

String s = "inside";

} catch (FileNotFoundException e) {

e.printStackTrace();

System.out.println(s);

}

原因是你不知道在try块中的哪个位置会引发异常。很有可能在声明对象之前引发了异常。对于此特定示例,这是正确的。

4.为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?

他们实际上抛出了不同的异常。这是JDK的问题。它们是由不同的开发人员开发的,因此不值得过多思考。

Integer.parseInt(null);

// throws java.lang.NumberFormatException: null

Double.parseDouble(null);

// throws java.lang.NullPointerException

Java中常用的运行时异常

这里只是其中一些。

IllegalArgumentException

ArrayIndexOutOfBoundsException

当不满足条件时,可以在if语句中使用它们,如下所示:

if (obj == null) {

throw new IllegalArgumentException("obj can not be null");

6.我们可以在同一个catch子句中捕获多个异常吗?

答案是肯定的。只要这些异常类可以追溯到类继承层次结构中的同一超类,就只能使用该超类。

7.构造函数可以在Java中引发异常吗?

答案是肯定的。构造函数是一种特殊的方法。这是一个代码示例。

8.在最后一个子句中引发异常

进行以下操作是合法的:

public static void main(String[] args) {

File file1 = new File("path1");

File file2 = new File("path2");

try {

FileInputStream fis = new FileInputStream(file1);

} catch (FileNotFoundException e) {

e.printStackTrace();

} finally {

try {

FileInputStream fis = new FileInputStream(file2);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

}

但是,为了获得更好的代码可读性,你应该将嵌入式try-catch块包装为新方法,然后将方法调用放在finally子句中。

public static void main(String[] args) {

File file1 = new File("path1");

File file2 = new File("path2");

try {

FileInputStream fis = new FileInputStream(file1);

} catch (FileNotFoundException e) {

e.printStackTrace();

} finally {

methodThrowException();

}

}

9.可以在finally块中使用

是的,它可以。

10.为什么开发人员会默默使用异常?

发生了许多类似以下的时间代码段。如果正确处理异常非常重要,为什么开发人员会继续这样做呢?

try {

...

} catch(Exception e) {

e.printStackTrace();

}

文章分享到这里,欢迎补充和评论。

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等

以及奉上近期吐血整理的全套java 架构思维导图,大家可以对比知识点参照学习。

3561041f7f5f32988b6feab0ea13fc4e.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值