Exception:在程序的运行过程中,发生了不正常的现象,阻止了程序的运行,我们称之为发生异常
用if-else堵漏洞的缺点(基本不会用if-else来处理异常)
(1)代码臃肿,业务代码和处理异常的代码混在一起
(2)可读性差
(3)程序员需要花费大量的精力来维护这个漏洞
(4)程序员很难堵住所有漏洞(异常)
一:基于if-else处理异常缺点太多,所以Java中专门出了一个异常处理机制:“异常三连”try-catch-finally
二:异常怎么看:
第一行:提示异常的类型
最后一行:提示异常出现的位置
三:捕获异常(用try-catch)
import java.util.InputMismatchException;
import java.util.Scanner;
public class num5 {
public static void main(String[] args) {
System.out.println("<<<<<<使用try.....cath处理输入异常>>>>>>");
num5 n=new num5();
n.sr();
}
public void sr(){
Scanner sc=new Scanner(System.in);
System.out.print("请输入一个数字:");
try {
sc.nextInt();
System.out.println("程序运行结束,谢谢你的配合!!!");
} catch (InputMismatchException e) {
// TODO: handle exception
System.out.println("你输入的不是一个有效数字,请重新输入!");
sr();
}
}
}
原理:把可能出现异常的代码放入try代,然后码块中,让后将异常封装为对象,被catch后面的()中的那个异常对象接受,接受以后,执行catch后面的{}里面的代码,然后try-catch后面的代码该怎么执行就怎么执行。
情况:
(1)try中没有异常,catch中代码不执行
(2)try中没有异常,catch进行捕获
如果catch中异常类型和你的异常类型匹配的话:走catch中的代码进行捕获
如果catch中异常类型和你的异常类型不匹配的话:不走catch中的代码,没有捕获成功,程序相当于遇到异常,中断了,后续代码不执行
注意:
(1)try中如果出现异常,然后catch捕获成功的话,那么try中后续的代码是不会执行的
(2)如果catch捕获异常成功,那么try-catch后面的代码该执行还是执行,没有影响
(1)在什么情况下,try-catch后面的代码不执行?
1.throw抛出异常的情况
2.catch中没有正常的进行异常捕获
3.在try中遇到return
(2)怎么样才可以将try-catch后面的代码必须执行?
只要将必须执行的代码放入finally中,那么这个代码无论如何一定执行
(3)return和finally执行顺序?
先执行finally最后执行return
(4)什么代码会放在finally中?
关闭数据资源,关闭io流资源,关闭socket资源
(5)有一句代码很厉害,它可以让finally中的代码不执行
system.exit(status:0);终止当前的虚拟机执行,以下代码就不执行了