Java 例外处理恶作剧

Java 例外处理恶作剧,java,exception-handling,Java,Exception Handling,如果我们不编写try-catch块或try-finally块或将异常传递给它的调用函数以检查异常,Java就会出现编译时错误。这一切都很好。但是,我的问题是,为什么catch块是可选的,也就是说,我们可以编写try-block-then-finally块,这不是一件肮脏的事。如果我在某个地方错了,请纠正我。 调用方法也可以处理异常 最后允许阻塞,因为即使引发异常,也可能有一些代码应该运行。即使引发异常,您也可能希望关闭某些数据库连接或资源 调用方法也可以处理异常 最后允许阻塞,因为即使引发异常

如果我们不编写try-catch块或try-finally块或将异常传递给它的调用函数以检查异常,Java就会出现编译时错误。这一切都很好。但是,我的问题是,为什么catch块是可选的,也就是说,我们可以编写try-block-then-finally块,这不是一件肮脏的事。如果我在某个地方错了,请纠正我。

  • 调用方法也可以处理异常
  • 最后
    允许阻塞,因为即使引发异常,也可能有一些代码应该运行。即使引发异常,您也可能希望关闭某些数据库连接或资源
      • 调用方法也可以处理异常
      • 最后
        允许阻塞,因为即使引发异常,也可能有一些代码应该运行。即使引发异常,您也可能希望关闭某些数据库连接或资源

      如果try块中的方法抛出未检查的异常,则可以省略
      catch

      未经检查的异常在Java中有特殊处理:

      • 如果抛出一个,则不必声明方法
        抛出它
        
      • 如果调用一个抛出一个的方法,无论它是在try块中还是在其他块中,您都不会被迫
        捕获它(也不会
        抛出它,请参见上文)

      Java中所谓的“未检查的异常”是明确定义的。所有异常最终都是可抛出的,未经检查的异常要么继承
      错误
      要么
      运行时异常

      如果尝试块中的方法抛出未经检查的异常,则可以忽略
      捕获

      未经检查的异常在Java中有特殊处理:

      • 如果抛出一个,则不必声明方法
        抛出它
        
      • 如果调用一个抛出一个的方法,无论它是在try块中还是在其他块中,您都不会被迫
        捕获它(也不会
        抛出它,请参见上文)

      Java中所谓的“未检查的异常”是明确定义的。所有异常最终都是可丢弃的,未经检查的异常要么继承
      错误
      ,要么继承
      运行时异常
      ,好吧,这不是一种真正干净/好的编码方式,但您告诉编译器您知道可能会出错。这并不意味着它是一个好的实践,但最终它是你的代码。编译器之所以让你对“try”感到不满,是因为你不知何故监督了它。这对于未检查的异常是特殊的。在Oracle上阅读更多关于它的信息。好吧,这不是一种真正干净/好的编码方式,但你告诉编译器你知道可能会出错。这并不意味着它是一个好的实践,但最终它是你的代码。编译器之所以让你对“try”感到不满,是因为你不知何故监督了它。这对于未检查的异常是特殊的。请在Oracle上阅读更多关于它的信息。Try finally通常用于处理关键代码以执行。类似于释放资源或锁定对象。这里的目的不是处理异常,而是确保即使发生意外异常资源也能安全释放。这是因为最终在所有场景中执行阻塞。唯一的例外是JVM不应该关闭。

      Try finally通常用于处理关键代码以执行。类似于释放资源或锁定对象。这里的目的不是处理异常,而是确保即使发生意外异常资源也能安全释放。这是因为最终在所有场景中执行阻塞。唯一的例外是JVM不应该关闭。

      如果在方法签名中声明异常(选中或未选中),则不会强制为try块使用catch子句。对于未检查的异常,您甚至不需要声明它

      然而,无论是否发生异常,您通常都需要释放或释放资源。所以你可以这样写:

      public void someMethod() throws IOException {
          Object resource = getSomeResource();
          try {
              // Imagine, all following calls could throw an IOException
              workWithResource(resource);
              continueWorkWithResource(resource);
              stillDoSomeWorkOnResource(resource);
          } finally {
              releaseResource(resource);
          }
      }
      
      即使其中一个方法抛出IOException,资源也会在将异常传播到该方法的调用方之前释放。如果没有例外,资源也会被释放


      始终执行finally块。

      如果在方法签名中声明异常(选中或未选中),则不会强制为try块使用catch子句。对于未检查的异常,您甚至不需要声明它

      然而,无论是否发生异常,您通常都需要释放或释放资源。所以你可以这样写:

      public void someMethod() throws IOException {
          Object resource = getSomeResource();
          try {
              // Imagine, all following calls could throw an IOException
              workWithResource(resource);
              continueWorkWithResource(resource);
              stillDoSomeWorkOnResource(resource);
          } finally {
              releaseResource(resource);
          }
      }
      
      即使其中一个方法抛出IOException,资源也会在将异常传播到该方法的调用方之前释放。如果没有例外,资源也会被释放


      始终执行finally块。

      对不起,您是说在
      try{}catch{}finally{}
      中,
      catch
      clouse是可选的吗???从没听说过。我想说它是强制性的,而finally是可选的。@Antoniossss Yes catch是可选的。。它是正确的,我们可以写try{}finally{}。。如果它是选中的异常,我们必须在调用函数时处理它,因为它是未选中的。编译器不会对此抱怨。。有关详细信息,请参阅链接。对不起,你是说在
      中,try{}catch{}finally{}
      中的
      catch
      clouse是可选的吗???从没听说过。我想说它是强制的,finally是可选的。@Antoniossss Yes catch是可选的。.它正确我们可以写try{}finally{}。.如果它是选中的异常,我们必须在调用函数时处理它,因为它是未选中的。编译器不会对此抱怨。.Pl