Java异常处理机制

Java异常处理机制,java,multithreading,exception,exception-handling,Java,Multithreading,Exception,Exception Handling,在Java中,如果我没有捕捉到抛出的异常,那么线程执行将停止在那里,否则如果我捕捉到相同的异常,那么线程执行将在捕捉块之后继续 Thx异常的目的是让程序了解发生了奇怪的事情,因此在程序中执行通常下一步的操作很可能是错误的。你调用的函数不能给你一个真实的答案,你依赖于这个答案,所以它不得不阻止你 有两种方法可以结束这种情况:通过catch块处理异常,或者整个程序停止 如果你的程序不知道当这些事情发生时该做什么,最好什么也不做。让异常使线程崩溃,然后您可以稍后检查崩溃日志,并找出程序崩溃的确切原因和

在Java中,如果我没有捕捉到抛出的异常,那么线程执行将停止在那里,否则如果我捕捉到相同的异常,那么线程执行将在捕捉块之后继续


Thx

异常的目的是让程序了解发生了奇怪的事情,因此在程序中执行通常下一步的操作很可能是错误的。你调用的函数不能给你一个真实的答案,你依赖于这个答案,所以它不得不阻止你

有两种方法可以结束这种情况:通过catch块处理异常,或者整个程序停止

如果你的程序不知道当这些事情发生时该做什么,最好什么也不做。让异常使线程崩溃,然后您可以稍后检查崩溃日志,并找出程序崩溃的确切原因和原因。如果您的程序无法处理错误,则异常的崩溃线程行为可让您查看未处理的错误,因此您可以更改程序,使其能够在将来处理此类情况,或防止此类情况发生

有些错误可能是很正常的,但是,不应该停止整个程序-您需要有一种方法从中恢复。这就是catch块的作用:一个向Java打招呼的机会,我知道如何解决这个问题,然后去做。Catch块允许您清理程序并继续(如果可以的话)。Java假设您的Catch block处理了这个问题并使它消失。如果有一个新问题,或者是同一个问题,您需要再次抛出捕获的异常,或者可能是一个新的异常,这样其他的东西可以尝试解决这个问题-即使作为程序员,这是其他的东西


如果异常总是使程序崩溃,那么就没有办法处理预期的和可以处理的错误。但是如果完全没有准备好处理错误,程序将无法继续运行,因为现在有些事情变得很奇怪,它不知道该怎么办,因为您没有对它进行任何编程。

异常的目的是让程序了解发生了奇怪的事情,因此,在该计划中做通常下一步的事情很可能是错误的。你调用的函数不能给你一个真实的答案,你依赖于这个答案,所以它不得不阻止你

有两种方法可以结束这种情况:通过catch块处理异常,或者整个程序停止

如果你的程序不知道当这些事情发生时该做什么,最好什么也不做。让异常使线程崩溃,然后您可以稍后检查崩溃日志,并找出程序崩溃的确切原因和原因。如果您的程序无法处理错误,则异常的崩溃线程行为可让您查看未处理的错误,因此您可以更改程序,使其能够在将来处理此类情况,或防止此类情况发生

有些错误可能是很正常的,但是,不应该停止整个程序-您需要有一种方法从中恢复。这就是catch块的作用:一个向Java打招呼的机会,我知道如何解决这个问题,然后去做。Catch块允许您清理程序并继续(如果可以的话)。Java假设您的Catch block处理了这个问题并使它消失。如果有一个新问题,或者是同一个问题,您需要再次抛出捕获的异常,或者可能是一个新的异常,这样其他的东西可以尝试解决这个问题-即使作为程序员,这是其他的东西

如果异常总是使程序崩溃,那么就没有办法处理预期的和可以处理的错误。但是如果完全没有准备好处理错误,程序就不能继续运行,因为现在有些事情变得很奇怪,它不知道该怎么做,因为你没有为它编写任何程序

在Java中,如果我没有捕获抛出的异常,那么线程执行将停止在那里;如果我捕获了相同的异常,那么线程执行将在catch块之后继续

还有第三种情况。如果线程有一个通过调用注册的线程,那么在线程堆栈上出现未捕获的异常时将通知它。。。在线程退出之前。事实上,行为要比这复杂一些;请参阅javadocs

为什么Java异常处理是以这种方式设计的

因为另一种选择更糟糕。。。在大多数情况下

假设线程因为没有捕获异常而导致run方法终止,那么唯一不能停止的就是让线程基础结构调用再次运行

但是,未捕获的异常通常意味着发生了不好的事情。典型的运行方法并没有设计成多次运行,所以它们可以做一些合理的事情。如果run方法因为某种未知的原因失败了,比如run me 就thod而言,再次调用它将更不可能起作用

此外,在少数情况下,您的run方法捕获每个异常并从中恢复是明智的,您总是可以编写代码来实现这一点。如果您不想恢复线程,您可以实现一个未捕获的异常处理程序来通知其他内容,并可能启动更高级别的恢复

对于当前的设计,唯一有点值得怀疑的是,由于未捕获异常而导致的线程终止通常是静默的。但解决方法是实现一个默认的未捕获异常处理程序,它会产生一些噪音

在Java中,如果我没有捕获抛出的异常,那么线程执行将停止在那里;如果我捕获了相同的异常,那么线程执行将在catch块之后继续

还有第三种情况。如果线程有一个通过调用注册的线程,那么在线程堆栈上出现未捕获的异常时将通知它。。。在线程退出之前。事实上,行为要比这复杂一些;请参阅javadocs

为什么Java异常处理是以这种方式设计的

因为另一种选择更糟糕。。。在大多数情况下

假设线程因为没有捕获异常而导致run方法终止,那么唯一不能停止的就是让线程基础结构调用再次运行

但是,未捕获的异常通常意味着发生了不好的事情。典型的运行方法并没有设计成多次运行,所以它们可以做一些合理的事情。如果run方法由于某种未知的原因而失败,那么再次调用它的可能性就更小了

此外,在少数情况下,您的run方法捕获每个异常并从中恢复是明智的,您总是可以编写代码来实现这一点。如果您不想恢复线程,您可以实现一个未捕获的异常处理程序来通知其他内容,并可能启动更高级别的恢复


对于当前的设计,唯一有点值得怀疑的是,由于未捕获异常而导致的线程终止通常是静默的。但解决方法是实现一个默认的未捕获异常处理程序,该处理程序会发出一些噪音……

这是一个非常广泛的问题,需要回答。异常基本上是为处理异常情况而设计的,如果他想通过捕获它来处理异常情况,则可以使用该控件,否则此线程将抛出它,因为继续此异常情况可能导致错误结果或应用程序状态不良,从而导致进一步的问题。这是一个非常广泛的问题,需要回答。异常基本上是为处理异常情况而设计的,并提供一个控件,如果他想通过捕获它来处理它,那么该线程将抛出它,因为继续此异常条件可能会导致错误的结果或应用程序的坏状态,从而导致进一步的问题。