74. throw 和 throws 的区别?75. final、finally、finalize 有什么区别?76. try-catch-finally 中哪个局部能够省略?77. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?78. 常见的异样类有哪些?

异样

74. throw 和 throws 的区别?

throw:

  1. 示意办法内抛出某种异样对象
  2. 如果异样对象是非 RuntimeException 则须要在办法申明时加上该异样的抛出 即须要加上 throws 语句 或者 在办法体内 try catch 解决该异样,否则编译报错
  3. 执行到 throw 语句则前面的语句块不再执行
     

throws:

  1. 办法的定义上应用 throws 示意这个办法可能抛出某种异样
  2. 须要由办法的调用者进行异样解决

75. final、finally、finalize 有什么区别?

  • final能够润饰类、变量、办法,润饰类示意该类不能被继承、润饰办法示意该办法不能被重写、润饰变量示意该变量是一个常量不能被从新赋值。
  • finally个别作用在try-catch代码块中,在解决异样的时候,通常咱们将肯定要执行的代码办法finally代码块中,示意不论是否出现异常,该代码块都会执行,个别用来寄存一些敞开资源的代码。
  • finalize是一个办法,属于Object类的一个办法,而Object类是所有类的父类,该办法个别由垃圾回收器来调用,当咱们调用System的gc()办法的时候,由垃圾回收器调用finalize(),回收垃圾。 

76. try-catch-finally 中哪个局部能够省略?

答:catch 能够省略

起因:

更为严格的说法其实是:try只适宜解决运行时异样try+catch适宜解决运行时异样+一般异样。也就是说,如果你只用try去解决一般异样却不加以catch解决,编译是通不过的,因为编译器硬性规定,一般异样如果抉择捕捉,则必须用catch显示申明以便进一步解决。而运行时异样在编译时没有如此规定,所以catch能够省略,你加上catch编译器也感觉无可非议。

实践上,编译器看任何代码都不悦目,都感觉可能有潜在的问题,所以你即便对所有代码加上try,代码在运行期时也只不过是在失常运行的根底上加一层皮。然而你一旦对一段代码加上try,就等于显示地承诺编译器,对这段代码可能抛出的异样进行捕捉而非向上抛出解决。如果是一般异样,编译器要求必须用catch捕捉以便进一步解决;如果运行时异样,捕捉而后抛弃并且+finally开头解决,或者加上catch捕捉以便进一步解决。

至于加上finally,则是在不论有没捕捉异样,都要进行的“开头”解决。

77. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

答:会执行,在 return 前执行。

代码示例1:

/* * 如果catch外面有return语句,finally外面的代码还会执行吗? */public class FinallyDemo2 {    public static void main(String[] args) {        System.out.println(getInt());    }    public static int getInt() {        int a = 10;        try {            System.out.println(a / 0);            a = 20;        } catch (ArithmeticException e) {            a = 30;            return a;        } finally {            a = 40;        }    }}

执行后果:30

代码示例2:

package com.java_02;/* * 如果catch外面有return语句,finally外面的代码还会执行吗? */public class FinallyDemo2 {     public static void main(String[] args) {        System.out.println(getInt());     }     public static int getInt() {         int a = 10;         try {            System.out.println(a / 0);            a = 20;         } catch (ArithmeticException e) {            a = 30;            return a;         } finally {            a = 40;            return a;             //如果这样,就又从新造成了一条返回门路,因为只能通过1个return返回,所以这里间接返回40         }    } }

执行后果:40

78. 常见的异样类有哪些?

  • NullPointerException:空指针异样,当应用程序试图拜访空对象时,则抛出该异样。
  • SQLException:SQL语句异样,提供对于数据库拜访谬误或其余错误信息的异样。
  • IndexOutOfBoundsException:索引超出边界异样,批示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 
  • NumberFormatException:数字格局异样,当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格局时,抛出该异样。
  • FileNotFoundException:文件找不到异样,当试图关上指定路径名示意的文件失败时,抛出此异样。
  • IOException:IO类异样,当产生某种I/O异样时,抛出此异样。此类是失败或中断的I/O操作生成的异样的通用类。
  • ClassCastException:类型转换异样,是JVM在检测到两个类型间转换不兼容时引发的运行时异样。
  • ArrayStoreException:数组储存异样,试图将谬误类型的对象存储到一个对象数组时抛出的异样。
  • IllegalArgumentException:不非法的参数异样,抛出的异样表明向办法传递了一个不非法或不正确的参数。
  • ArithmeticException:算术运算异样,当出现异常的运算条件时,抛出此异样。例如,一个整数“除以零”时,抛出此类的一个实例。 
  • NegativeArraySizeException:负数组大小异样,如果应用程序试图创立大小为负的数组,则抛出该异样。
  • NoSuchMethodException:无此办法异样,无奈找到某一特定办法时,抛出该异样。
  • SecurityException:平安异样,由平安管理器抛出的异样,批示存在平安进犯。
  • UnsupportedOperationException:不反对性能异样,当不反对申请的操作时,抛出该异样。
  • RuntimeException:运行异样,是那些可能在Java虚拟机失常运行期间抛出的异样的超类。