异常就是在程序的运行过程中所发生的不正常的事件, 它会中断正在运行的程序,面对异常该怎么办呢?通常情况下, 我们会这样处理:
Java编程语言使用异常处理机制为程序提供了错误处理的能力异常处理机制抛抓模型
运行的代码先抛出异常: 放在try{}块中
然后捕获抓取异常: catch(异常类型 异常对象)
最后再进行异常处理: catch{}块中进行处理
Java中如何进行异常处理
Java的异常处理是通过5个关键字来实现的:
try执行可能产生、 catch捕获异常、 finally无论是否发生异常,代码总能执行、 throw手动/显式、 throws抛出异常
示例:
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
}//
代码段5
}finally{
//无论是否有异常都会执行的代码段6
}
try-catch异常处理流程
异常是一种特殊的对象, 类型为java.lang.Exception或其子类发生异常printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程
java.util.InputMismatchException //异常类型
at java.util.Scanner.throwFor(Scanner.java:840) //异常堆栈信息
at java.util.Scanner.next(Scanner.java:1461) //在此方法中抛出了异常
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at cn.jbit.exception.Test3.main(Test3.java:15)// 出现异常的位置
在catch块中处理异常,可以加入用户自定义处理信息,通过调用异常对象的方法输出异常信息:
e.printStackTrace();
System.err.println("出现错误: 被除数和除数必须是整数," + "除数不能为零。 ");
void printStackTrace()输出异常的堆栈信息
String getMessage()返回异常信息描述字符串,是printStackTrace()输出信息的一部分
方 法 名 | 说 明 |
Exception | 异常层次结构的根类 |
ArithmeticException | 算术错误情形, 如以零作除数 |
ArrayIndexOutOfBoundsE xception |
数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
InputMismatchException | 欲得到数据类型与实际输入类型不匹配 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException |
数字格式转换异常, 如把"abc"转换成 数字 |
在try-catch块后加入finally块, 可以确保无论是否发生异常, finally块中的代码总能被执行
注意: 如果代码块中加入了System.exit(1);
强制终止程序执行语句,finally块不会执行
public class Test4 {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
System.out.print("请输入被除数:");
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(String.format("%d / %d = %d",
num1, num2, num1/ num2));
} catch (Exception e) {
System.err.println(“出现错误: 被除数和除数必须是整数, "
+"除数不能为零。 ");
System.out.println(e.getMessage());
} finally {
System.out.println("感谢使用本程序! ");
}
}
}
程序中预先想好了对付异常的处理办法,如果程序运行异常!则开始对异常进行处理,处理完毕,程序继续运行,这就是java异常处理机制的原理,希望读完该文章能对你有所帮助。
Java热点新闻