概念:1.异常是指在程序运行过程中所发生的不正常事件,它会中断正在运行的程序
2.java中所有异常都是 Exception(父类) 例如: ArithMeticException( 子类)
3.异常通常通过5个关键字来实现的: try(尝试正常运行可能出现异常)、catch(捕获异常)、finally(最终终于最后)、throw(声明并抛出异常)、throws(声明方法可能抛出的异常)
1.非异常机制解决方式 - //解决提示出错后无法继续执行相应代码
in.hasNextInt(); //判断用户在控制台录入的是否为整数,如是为 true ,否为 false !!!
System.exit(1); //程序强制退出虚拟机,括号值里面如果非0就会退出程序
System.err.println(""); //修饰错误的形式输出语句
参考代码:
System.out.println("请输入除数:");
int num2=0;
if(in.hasNextInt() ){ //判断用户在控制台录入的是否为整数,如是为true,否为false!!!
//录入的是整数
nun2=in.nextInt();
if(num2==0){
System.err.println("输入的除数是0,程序退出!"); //修饰错误的形式输出语句
System.exit(1); //程序强制退出虚拟机,括号值里面如果非0就会退出程序
}else{
System.out.println(num2+"感谢您使用本程序");
}
}else{ //录入的不是整数
System.out.println("录入的输不是整数,程序退出");
System.exit(1); //程序强制退出虚拟机,括号值里面如果非0就会退出程序
}
2.try-catch的应用
try 产生异常的对象(可能会出现错误的代码块)
catch 捕抓异常的类型(根据类型进行捕抓错误信息,可以多个catch使用)
e.printStackTrace(); //e代表变量名,后续代表打印异常堆栈的信息
e.getMessage(); //打印异常信息字符串,非所有异常提示有错误提示
try {
int num1=inpurt.nextInt();
System.out.println("请输入除数");
int num2=inpurt.nextInt();
System.out.println(num1+"+"+num2+"="+num1/num2);
} catch (ArithmeticException e) {
System.err.println("程序出现错误操作"); //错误信息的输出提示err
e.printStackTrace(); //打印异常堆栈的信息
syso(e.getMessage()); //打印异常信息字符串,非所有异常提示有错误提示
}
System.out.println("感谢使用本程序");
3.finally应用
1.在try-catch块后加入finally块的代码是否发生异常都会执行,如在System.exit(1)中断程序,就不会执行finally
2.存在return的try-catch-finally块中(先执行try----catch----finally----return)
3.try-catch-finally 中try语句块是必须的,catch-finally其一均可!!!
参考代码:
try {
int num1=inpurt.nextInt();
System.out.println("请输入除数");
int num2=inpurt.nextInt();
System.out.println(num1+"+"+num2+"="+num1/num2);
} catch (ArithmeticException e) {
System.err.println("程序出现错误操作"); //错误信息的输出提示err
e.printStackTrace(); //打印异常堆栈的信息
syso(e.getMessage()); //打印异常信息字符串,非所有异常提示有错误提示
}finally{
System.out.println("感谢使用本程序"); //是否发生异常都会执行
}
4.多重catch
排列catch语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句
参考代码:
try{
System.out.println("结果是:"+(num1/num2));
}catch (NullPointerException e) {
System.out.println("空指针异常");
}catch(ArithmeticException e){
e.printStackTrace();
System.out.println(e.getMessage());
System.out.println("算数错误异常");
}finally{
System.out.println("程序结束");
}
5.throw及throws
throw | throws |
生成并抛出异常 | 声明方法内抛出了异常 |
位于方法体内部,可作为单独语言使用 | 必须跟在方法参数列表后面,不能单独使用 |
抛出一个异常对象,且只能是一个 | 声明抛出异常类型,可以跟多个异常 |
流程:定义异常类---编写构造方法,继承父类的实现----实例化自定义对象----使用throw抛出
继承 Exception
二.常见的异常类型
异常类型 | 说明 |
Exception | 异常层次的父类 |
ArithmeticException | 算数错误的情形,如:以零作被除数 |
ArrayIndexOutOfException | 数组下标越界 |
NullPointerException | 尝试访问Null对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IIlegalArgumentException | 对象强制类型转换异常 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如:把“abc”转换成数字 |