当前位置: 首页 > 面试题库 >

Java Try Catch块

傅边浩
2023-03-14
问题内容

我最初从大学开始编程,然后学习了vb.net。现在,我决定转向Java并进行一些查询。在vb中,try catch语句的布局如下

try
Catch ex as exception
finally
End catch

但是在Java网站(https://docs.oracle.com/javase/tutorial/essential/exceptions/putItTogether.html)中,我发现在Java中,您使用了两个陷阱,如下所示:

    try {

} catch (ExceptionType name) {

} catch (ExceptionType name) {

}

我希望有人能够解释为什么您需要在Java中使用两个catch,以及各自的catch做/捕获什么。

谢谢。


问题答案:

在Java中, 可以 使用多个catch块。

它不一定意味着您必须这样做。

这取决于你的代码必须在try块,多少检查Exception的IT可能会潜在地抛出(甚至未选中Exception■如果你真的想赶上那班,通常你不这样做,你不
)。

一种 不好的
做法是将单个处理程序用于一般Exception(或更糟糕的是Throwable,也将捕获RuntimeExceptions和Errors):

try {
    // stuff that throws multiple exceptions
}
// bad
catch (Exception e) {
    // TODO
}

良好 的做法是捕获所有可能抛出 检查 Exception秒。

如果它们中的一些在继承方面相关,请始终先捕获子类(即更具体的Exceptions),以免您的代码无法编译:

try {
    // stuff that throws FileNotFoundException AND IOException
}
// good: FileNotFoundException is a child class of IOException - both checked
catch (FileNotFoundException fnfe) {
    // TODO
}
catch (IOException ioe) {
    // TODO
}

还要看一下Java 7的multi-
catch块
,其中不相关的Exceptions可以一次捕获|,每种Exception类型之间使用分隔符:

try (optionally with resources) {
    // stuff that throws FileNotFoundException and MyOwnCheckedException
}
// below exceptions are unrelated
catch (FileNotFoundException | MyOwnCheckedException e) {
    // TODO
}

注意

在您链接到的这个示例中,
将它们放在一起 下面的第一个代码片段可以说是次优的:它 确实
捕获了可能抛出的Exceptions,但是其中一个是IndexOutOfBoundsException,这是一个RuntimeException(未选中),不应理论上处理。

取而代之的是,SIZE变量(或可能的常量)应替换为对List要迭代的大小的引用,即list.size()为了防止IndexOutOfBoundsException被抛出。

我想在这种情况下只是提供一个例子。



 类似资料:
  • 问题内容: 我想知道在Python应用程序中导入包的首选方法。我有一个这样的包结构: project.app1.views进口project.app1.models和project.app2.models。我想到有两种方法可以做到这一点。 绝对进口: 或具有明确的相对导入,如在Python 2.5中使用PEP 328引入的那样: 什么是最pythonic的方式做到这一点? 问题答案: 绝对进口。从

  • 问题内容: 我们目前正在编写一个应用程序,该应用程序分为多个项目/模块。例如,让我们采用以下模块: myApp-DAO myApp-jabber 每个模块都有其自己的Spring上下文xml文件。对于DAO模块,我有一个PropertyPlaceholderConfigurer,它读取带有必需的数据库连接参数的属性文件。在jabber模块中,我还有一个用于jabber连接属性的PropertyPl

  • 问题内容: 我已经开始学习线程同步。 同步方法: 同步块: 什么时候应该使用方法和块? 为什么块比方法更好? 问题答案: 这不是更好的问题,只是有所不同。 同步方法时,实际上是在与对象本身进行同步。对于静态方法,您正在同步到对象的类。因此,以下两段代码以相同的方式执行: 就像您写的一样。 如果要控制到特定对象的同步,或者只想将方法的 一部分 同步到该对象,则指定一个块。如果在方法声明上使用关键字,

  • 问题内容: 我想知道使用像这样的构造是否可靠: 我是否有可能因为初始化块将在初始化块之前执行? (关于我为什么不在上层init的末尾进行初始化。块:只是味道问题;如果所描述的构造不可靠,我将这样做) 问题答案: 是的,保证静态初始化程序块按文本顺序执行。 从JLS,第12.4.1节: 目的是类或接口类型具有一组初始化器,这些初始化器将其置于一致状态,并且该状态是其他类观察到的第一个状态。 静态初始

  • 问题内容: 我知道如何按字节读取文件,但是找不到如何按字节读取文件的示例。我有一个字节数组,我想读取512bytes的文件并通过套接字发送它们。 我尝试读取文件的总字节,然后减去512字节,直到得到小于512字节的块,并发出EOF和传输结束的信号。 我正在尝试实现TFTP,其中以512字节块发送数据。 无论如何,我们将为一个例子而感激。 问题答案: 您…一次读取512个字节。

  • 问题内容: 不得不与Guice打交道,我想知道我应该如何处理模块方面的依赖关系。 在Guice中,每个模块都是由实例提供的。因此,如果我有一个需要某种服务的模块,它将创建一个向该服务添加绑定的模块并进行安装(binder.install(module))。 现在,我有两个独立的模块,完全可以独立使用,并且都安装了相同的数据库模块。 单独使用两个模块都不会出现问题,但是如果两个模块在同一应用程序中使

  • 问题内容: 我有下面的代码。我只想检查代码块的运行时间。错误地,我再次复制并粘贴了相同的代码,并得到了有趣的结果。尽管代码块相同,但运行时间不同。而且 比其他人花费更多的时间。如果我切换代码块,则代码块4将比其他代码花费更多时间。 我在代码块中使用了两种不同类型的数组来检查它是否依赖于此。结果是一样的。如果代码块具有相同类型的数组,则最上面的代码块将花费更多时间。参见下面的代码和给出的输出。 运行

  • 问题内容: 我最近一直在研究OSGi,认为对于模块化Java应用程序来说,这似乎是一个非常不错的主意。 但是,我想知道OSGi如何在Web应用程序中工作,而您不仅仅需要担心代码-HTML,图像,CSS之类的事情。 在工作中,我们正在构建一个具有多个“标签”的应用程序,每个标签都是应用程序的一部分。我认为这可以从采用OSGi的方法中真正受益- 但是我真的不确定什么是处理所有常规Web应用程序资源的最