1. Exception是所有异常的父类。
2. 基于if-else处理异常缺点太多了,所以java中专门处理一个异常处理机制:
“异常三连” try-catch-finally
3. 异常出现了怎么看:
4. 捕获异常:try-catch
原理:把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的()中的那个异常对象接收,接收以后,执行catch里面的代码,最后执行try-catch后面的代码。
5. 三种情况下,try-catch后面的代码不执行
(1) throw抛出异常
(2) catch中没有正常的进行异常捕获
(3) 在try中遇到return(有finally时,先执行finally,再执行return)
但把代码放在finally中,那么这个代码无论如何一定会执行
``` try {
}catch (Exception ex){
throw ex;//下面的代码不执行
}finally{
}
```java
import java.util.Scanner;
public class test {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
int num1 = sc.nextInt();
System.out.println("请输入第二个数");
int num2 = sc.nextInt();
System.out.println("商:"+num1/num2);
}catch (Exception ex){
//异常处理方式
//(1) 调用toString方法,显示异常的类名(全限定路径)
System.out.println(ex);
System.out.println(ex.toString());
//(2) 显示异常描述信息对应的字符串,如果没有就显示null
System.out.println(ex.getMessage());
//(3) 显示异常的堆栈信息:将异常信息捕获后,在控制台将异常的效果展示处理,方便我们查看异常
ex.printStackTrace();
//(4) 抛出异常
throw ex;//下面的代码不执行
}
}
}
```
6. 什么代码会放在finally中呢?
关闭数据库资源,关闭IO流资源,关闭socket资源。
注意:在try中加System.exit(0);表示终止当前的虚拟机执行,即finally也不会执行。只有这一种情况finally不会执行。
7. throw和throws的区别:
(1)位置不同:
throw:方法内部
throws:方法的签名处,方法的声明处
(2)内容不同
throw+异常对象(检测异常,运行时异常)
throws+异常的类型(可以多个类型,用,拼接)
(3)作用不同
throw:异常出现的源头,制造异常。
throws:在方法的声明处,告诉方法的调用者,这个方法中可能出现我声明的这些异常,调用者需要对异常进行处理,要么加try-catch,要么继续向外抛异常
```
importjava.util.Scanner;
publicclasstest{
publicstaticvoidmain(String[]args)throwsException{
devide();
}
publicstaticvoiddevide()throwsException{
Scannersc=newScanner(System.in);
System.out.println("请输入第一个数");
intnum1=sc.nextInt();
System.out.println("请输入第二个数");
intnum2=sc.nextInt();
if(num2==0){//除数为0制造异常
//制造运行时异常:
// throw new RuntimeException("输入有误");
// //制造检测异常:
// try {
// throw new Exception();
// }catch (Exception ex){
// ex.printStackTrace();
// }
thrownewException();
}
else{
System.out.println("商:"+num1/num2);
}
}
}```