1.已检查与未检查
简而言之,必须在方法中显式捕获已检查的异常,或在方法的throws子句中声明该异常。未检查的异常是由无法解决的问题引起的,例如被零除,空指针等。检查的异常特别重要,因为您希望使用API的其他开发人员知道如何处理异常。java初学者小白?遇到BUG就慌了?有关java异常的十大问题详解!_第1张图片
例如,IOException是一个常用的已检查异常,而RuntimeException是一个未检查的异常。您可以在阅读其余内容之前先检查一下Java异常层次结构图。
2.异常管理的最佳实践
如果可以正确处理异常,则应将其捕获,否则应将其引发。
3.为什么在try中定义的变量不能用于catch或final?
在以下代码中,在try块中声明的字符串s不能在catch子句中使用。该代码不通过编译。
尝试 {
File file = new File (“ path” );
FileInputStream fis = 新的 FileInputStream (文件);
字符串 s = “ inside” ; } catch (FileNotFoundException e ) {
e。printStackTrace ();
系统。出来。println ( s ); }
原因是您不知道在try块中的哪个位置会引发异常。很有可能在声明对象之前引发了异常。对于此特定示例,这是正确的。
4.为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?
他们实际上抛出了不同的异常。这是JDK的问题。它们是由不同的开发人员开发的,因此不值得过多思考。
整数。parseInt (null ); //抛出java.lang.NumberFormatException:null
 双倍。parseDouble (null ); //抛出java.lang.NullPointerException

  1. Java中常用的运行时异常
    这里只是其中一些。
    IllegalArgumentException
    ArrayIndexOutOfBoundsException
    当不满足条件时,可以在if语句中使用它们,如下所示:
    如果 ( obj == null ) {
    抛出 新的 IllegalArgumentException (“ obj不能为null” );
    6.我们可以在同一个catch子句中捕获多个异常吗?
    答案是肯定的。只要这些异常类可以追溯到类继承层次结构中的同一超类,就只能使用该超类。
    7.构造函数可以在Java中引发异常吗?
    答案是肯定的。构造函数是一种特殊的方法。这是一个代码示例。
    8.在最后一个子句中引发异常
    进行以下操作是合法的:
    公共 静态 无效主(字符串[ ] args ) {
    文件 file1 = 新 文件(“ path1” );
    文件 file2 = 新 文件(“ path2” );
    尝试 {
     
    FileInputStream fis = 新的 FileInputStream ( file1 );
    } catch (FileNotFoundException e ) {
    e。printStackTrace ();
    } 最后 {
    尝试 {
    FileInputStream fis = new FileInputStream ( file2 );
    } catch (FileNotFoundException e ) {
    e。printStackTrace ();
    }
    }}
    但是,为了获得更好的代码可读性,您应该将嵌入式try-catch块包装为新方法,然后将方法调用放在finally子句中。
    公共 静态 无效主(字符串[ ] args ) {
    文件 file1 = 新 文件(“ path1” );
    文件 file2 = 新 文件(“ path2” );
    尝试 {
     
    FileInputStream fis = 新的 FileInputStream ( file1 );
    } catch (FileNotFoundException e ) {
    e。printStackTrace ();
    } 最后 {
    methodThrowException ();
    } }
    9.可以在finally块中使用
    是的,它可以。
    10.为什么开发人员会默默使用异常?
    发生了许多类似以下的时间代码段。如果正确处理异常非常重要,为什么开发人员还会继续这样做呢?
    尝试 {
    ...} catch (Exception e ) {
    e。printStackTrace (); }
    因为忽略很容易。频繁发生并不意味着不正确。
    最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。
    java初学者小白?遇到BUG就慌了?有关java异常的十大问题详解!_第2张图片