什么是异常?
异常就是指的程序在运行过程中,发生的不正常(用户操作不当、服务终止、程序BUG……)的程序无法正常运作的情况
异常处理的目的:为了提高程序的稳定性和健壮性,让程序正常的运作下去
java如何处理异常:
public class Test2 { 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){ System.out.println("对不起,程序出现异常!"); } System.out.println("----谢谢你使用计算器"); } }
把可能出现异常的代码放入try代码块中,然后将异常封装为对象,被catch后面的()中的那个异常对象接收,接收以后:执行catch后面的{}里面的代码,然后try-catch后面的代码,该怎么执行就怎么执行。
try中没有异常,catch中代码不执行
try中有异常,catch进行捕获
如果catch中异常类型和你出的异常类型匹配的话:走catch中的代码进行捕获
如果catch中异常类型和你出的异常类型不匹配的话:不走catch中的代码没有捕获成功,程序相当于遇到异常了
try中如果出现异常,然后用catch捕获成功的话,那么try中后续的代码是不会执行的
如果catch捕获异常成功,那么try-catch后面的代码该执行还是执行没有影响
try{ }catch(){ }catch(){ }....
Throwable - >Error(错误)
Throwable - >Exception(异常)- >…
Exception 分为RuntimeException、非运行时异常、IOException
当异常被捕获到是,异常对象就会自动创建
e.getMessage() // 输出异常信息
e.printStackTrace() // 在控制台上打印输出异常的错误情况(调用栈情况)
自定义的异常可以继承:运行时异常也可以继承检查异常:
如果继承的是运行时异常,那么在使用的时候无需额外处理
如果继承的是检查异常,那么使用的时候需要try-catch捕获或者throws向上抛
(1)位置不同:
throw:方法内部
throws: 方法的签名处,方法的声明处
(2)内容不同:
throw+异常对象(检查异常,运行时异常)
throws+异常的类型(可以多个类型,用,拼接)
(3)作用不同:
throw:异常出现的源头,制造异常。
throws:在方法的声明处,告诉方法的调用者,这个方法中可能会出现我声明的这些异常。然后调用者对这个异常进行处理:
要么自己处理要么再继续向外抛出异常
运行时异常:继承了RuntimeException的异常
特点是:只有在运行时,才能知道是否会有异常
非运行时异常(编译型异常):
特点是:在编译时,就会报错,必须处理!!!
特点:不管是否存在异常,finally部分必须要执行
System.exit(0);//终止当前的虚拟机执行,只有这个可以强制不执行finally