关于Java异常的十大问题

开发 前端
本文总结了有关 Java 异常的10个常见问题。

1.选中与未选中

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

例如,IOException 是常用的已检查异常,而 RuntimeException 是未检查异常。在阅读其余部分之前,您可以查看Java 异常层次图。

2. 异常管理的优秀实践

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

3、为什么try中定义的变量不能在catch或finally中使用?

在下面的代码中,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

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

这里只是其中的一些。

IllegalArgumentException
ArrayIndexOutOfBoundsException

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

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

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

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

7、java中构造函数可以抛出异常吗?

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

8. 在 final 子句中抛出异常

执行以下操作是合法的:

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 块中使用 return

是的,它可以。

10. 为什么开发者默默消费异常?

有很多像下面这样的时间码段。如果正确处理异常如此重要,为什么开发人员继续这样做?

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

忽略很容易。频繁出现并不代表正确。

责任编辑:华轩 来源: 今日头条
相关推荐

2019-10-21 08:31:34

容器微服务docker

2013-06-21 14:36:02

JavaEEx性能

2013-07-25 14:56:37

JavaEE 性能

2023-09-19 10:19:24

2022-06-16 11:02:18

IT领导者首席信息官

2009-07-16 10:04:56

Java语言

2015-11-02 14:15:05

2012-02-14 09:59:09

NoSQLCouchDB

2024-06-21 14:13:45

2009-12-08 14:42:30

Windows 7操作

2014-01-16 09:25:46

2015-04-22 12:08:16

JAVAMap问题

2013-01-18 11:18:02

2023-08-03 09:45:52

2011-03-16 13:54:51

十大问题应用iOS

2011-11-16 09:43:07

2011-03-11 14:36:56

SQL Server数

2020-02-05 08:35:24

云计算

2012-01-09 11:25:32

云计算

2024-08-06 10:00:11

点赞
收藏

51CTO技术栈公众号