Java异常
异常
Exception和Error区别1)Exception是程序正常运行中,可以预料的以外情况,可以被捕获进行相应处理;Error是正常情况下,不大可能出现的情况,绝大部分Error会导致程序处于非正常、不可恢复状态,如OutOfMemoryError等无法捕获处理。 2)Exception分为可检查异常(checked)和不检查异常(unchecked),可检查异常在程序中必须显式进行捕获处理,是编译期检查的一部分。不检查异常是运行时异常,如NullPointerException、ArrayIndexOutOfBoundsException等,属于编码可避免的逻辑错误,不会编译期强求。 3)Exception和Error都继承Throwable。
NoClassDefFoundError和ClassNotFoundException区别NoClassDefFoundError是一个Error类,是指一个class在编译时存在,但在运行时不到class文件。 ClassNotFoundException是一个Exception类,使用类似Class.forName()等方法时进行的checked exception。checked exception和unchecked exception区别受检查异常1)checked exception是受检查异常,Java代码在编译过程中,若受检查异常未被catch或throws关键字处理,则无法通过编译。2)除了RuntimeException及其子类,其他的Exception类和其子类都属于受检查异常。3)常见的受检查异常:如IO相关异常、SQLException、ClassNotFoundException。不受检查异常(运行时异常)1)unchecke exception是不受检查异常,Java代码在编译过程中,即使不
nullpointerexception为什么异常
处理该异常,也能够通过编译。2)RuntimeException及其子类都是不受检查异常。3)常见的不受检查异常:NullPointerException(空指针异常)、IllegalArgumentException(参数不合法异常)、NumberFormatException(字符串转数字格式异常)、ArrayIndexOutOfBoundsException(数组越界异常)、ClassCastException(类型转换异常。ArithmeticException(算术异常)、SecurityException(安全异常)等throw和throws区别1)throw是语句抛出一个异常,一般在代码块的内部,判别代码逻辑错误后主动抛出某种特定的异常。throws表示抛出异常,由该方法的调用者来处理。 2)throw定义在方法体内,跟的是异常对象名。throws定义在方法参数列表后面,可以跟多个异常类名,用逗号隔开。 3)throw是确定发生了哪种异常才可以使用,throws是表示向调用该类的位置抛出异常,不在该类解决。 4)throw是抛出异常,执行throw一定可以抛出某种异常;throws是表示出现异常的可能性,但不一定发生这些异常。Throwable常用方法1)String getMessag():返回异常发生时的简要信息。 2)String toString():返回异常发生时的详细信息。 3)String getLocalizeMessage():返回异常对象的本地化信息。若使用Throwable的子类覆盖这个方法,可以生成本地化信息,若没有覆盖,同getMessage()方法。4)void printStackTrace():控制台上打印Throwable对象封装的异常信息。try-catch-finally 1)try块:用于捕获异常,后面可以跟0个或多个catch块,若没有catch块,必须跟一个finally块。 2)catch块:用于处理try中捕获到的异常。 3)finally块:无论是否捕获或处理异常,都会执行finally中的程序。当try块或catch块中遇到return语句,finally块中的语句会在方法返回前执行。所以不要在finally中使用return,一旦使用。try和catch中的return就会无意义。
finally中的语句一定会执行吗?不一定。1)有可能在catch中有it(1)这种提前终止程序的语句。 2)CPU被直接关闭。 3)程序所在的线程直接死亡了。try-with-resources 1)适用范围:任何实现java.lang.AutoCloseable或java.io.Closeable对象。 2)示例: try(BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File("t1.txt"))); (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File("t2.txt")))) {      int b;      while((b = in.read()) != -1){                ate(b);      } } catch (IOException e){    e.printStackTrace(); }