10 个问题搞定 Java 异常处理,值得收藏!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10 个问题搞定 Java 异常处理,值得收藏!相关的知识,希望对你有一定的参考价值。

本文总结了关于Java异常的十大常见问题。

1. 有检查的与无检查的

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

例如,IOException是一个常用的检查异常,RuntimeException是一个未检查的异常。在阅读其他内容之前,你可以先看看《Java 异常层次图》。

10

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);

原因是你不知道在尝试块的什么地方会抛出异常。很有可能在对象被声明之前就抛出了异常。在这个特定的例子中,情况就是如此。

4. 为什么Double.parseDouble(null)和Integer.parseInt(null)会产生不同的异常?

它们实际上抛出了不同的异常。这是JDK的一个问题。它们是由不同的开发者开发的,所以不值得过多的思考。

Integer.parseInt(null); 
// throws java.lang.NumberFormatException: null

Double.parseDouble(null);
// throws java.lang.NullPointerException

5. Java中常用的运行时异常

下面是其中的一些。

非法参数异常(IllegalArgumentException

ArrayIndexOutOfBoundsException

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

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

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

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

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. return可以在finally块中使用吗?

是的,可以。

10. 为什么开发人员要默默地消耗异常?

有很多像下面这样的代码段发生。如何处理异常是如此重要,为什么开发人员一直这样做?

try 
...
catch(Exception e)
e.printStackTrace();

忽视只是简单的。频繁出现并不意味着正确性。

以上是关于10 个问题搞定 Java 异常处理,值得收藏!的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 必知必会的18个实用技巧,值得收藏!

183个Java面试题及回答,值得收藏!

面试系列-40个Java多线程问题总结(值得收藏)

经常进行数据处理?这6个 Python 代码块值得收藏

干货分享java性能优化,这35个细节值得收藏

Python入门基础知识实例,值得收藏!