关于面试:面试异常

1次阅读

共计 2635 个字符,预计需要花费 7 分钟才能阅读完成。

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 虚拟机失常运行期间抛出的异样的超类。
正文完
 0