当前位置: 首页 > 科技观察

关于Java异常的十大问题

时间:2023-03-20 00:25:50 科技观察

1.Checked与Unchecked简而言之,checked异常必须在方法中显式捕获或在方法的throws子句中声明。未经检查的异常是由无法解决的问题引起的,例如被零除、空指针等。检查的异常尤其重要,因为您希望使用您的API的其他开发人员知道如何处理异常。例如,IOException是常用的检查异常,而RuntimeException是非检查异常。在阅读其余部分之前,您可以查看Java异常层次图。2.异常管理的良好实践如果异常能够正确处理,就应该捕获,否则就抛出。3、为什么try中定义的变量不能在catch或finally中使用?在下面的代码中,在try块中声明的字符串s不能在catch子句中使用。代码无法编译。尝试{文件文件=新文件(“路径”);FileInputStreamfis=newFileInputStream(文件);Strings="inside";}catch(FileNotFoundExceptione){e.printStackTrace();System.out.println(s);}原因是你不知道异常会在try块的什么地方抛出。很可能在声明对象之前抛出异常。对于这个特定的例子,这是正确的。4.为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常?他们实际上抛出不同的异常。这是JDK的问题。它们是由不同的开发人员开发的,因此不值得考虑太多。Integer.parseInt(null);//抛出java.lang.NumberFormatException:nullDouble.parseDouble(null);//throwsjava.lang.NullPointerException5.Java中常见的运行时异常只是其中的一部分。IllegalArgumentExceptionArrayIndexOutOfBoundsException当条件不满足时,你可以像这样在if语句中使用它们:if(obj==null){thrownewIllegalArgumentException("objcannotbenull");6.我们可以在同一个catch子句中使用它们捕获多个异常吗?答案是肯定的。只要那些异常类在类继承层次结构中可以追溯到同一个超类,你就可以使用那个超类。7.java中的构造函数可以抛出异常吗?答案是肯定的。构造函数是一种特殊的方法。这是一个代码示例。8.在final子句中抛出异常执行以下操作是合法的:publicstaticvoidmain(String[]args){Filefile1=newFile("path1");文件file2=newFile("路径2");尝试{FileInputStreamfis=newFileInputStream(file1);}catch(FileNotFoundExceptione){e.printStackTrace();}finally{try{FileInputStreamfis=newFileInputStream(file2);}catch(FileNotFoundExceptione){e.printStackTrace();但是为了更好的代码可读性,您应该将嵌入的try-catch块包装为一个新方法,并将方法调用放在finally子句中。publicstaticvoidmain(String[]args){Filefile1=newFile("path1");文件file2=newFile("路径2");尝试{FileInputStreamfis=newFileInputStream(file1);}catch(FileNotFoundExceptione){e.printStackTrace();}最后{methodThrowException();}}9.finally块中可以使用return是的,可以。10.为什么开发者默默的消费异常?有许多时间码段,如下所示。如果正确处理异常是如此重要,为什么开发人员要继续这样做呢?try{...}catch(Exceptione){e.printStackTrace();}很容易被忽略。经常出现并不代表正确。