共计 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:
- 示意办法内抛出某种异样对象
- 如果异样对象是非 RuntimeException 则须要在办法申明时加上该异样的抛出 即须要加上 throws 语句 或者 在办法体内 try catch 解决该异样,否则编译报错
- 执行到 throw 语句则前面的语句块不再执行
throws:
- 办法的定义上应用 throws 示意这个办法可能抛出某种异样
- 须要由办法的调用者进行异样解决
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 虚拟机失常运行期间抛出的异样的超类。
正文完