java的异常机制
一、零引发的血案
1、看问题
首先、问大家一个问题:
public static void main(String[] args) {
int num1 = 10;
Scanner scanner = new Scanner(System.in);
int num2 = scanner.nextInt();
int res = num1 / num2;
System.out.println(res);
System.out.println("后边还有代码呦!");
}
请问:如果我输入了 “abc” 或者 0 程序应该怎么运行呢?
abc
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at cn.itnanls.Demo.main(Demo.java:13)
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at cn.itnanls.Demo.main(Demo.java:14)
程序他在想办法告诉你,你错了!程序是永远找不到女朋友的,因为程序员只有真的是自己错了,他才会承认自己错了。
而且有个很重要的问题,程序碰到异常就不在继续执行后边的代码了,真是悲剧,很明显这不是你想要的。
世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。
2、解决方案
其实这个例子的解决方案至少有两种:
(1)、运行前对参数进行校验
public static void main(String[] args) { int num1 = 10;
Scanner scanner = new Scanner(System.in);
int num2 = scanner.nextInt();
if (num2 == 0){
System.out.println("除数不能为零"); return;
}
int res = num1 / num2;
System.out.println(res);
System.out.println("后边还有代码呦!");
}
这样是不是就解决了除数不能为零的问题。
(2)、出了问题想办法解决
public static void main(String[] args) {
// 尝试执行
try {
int num1 = 10;
Scanner scanner = new Scanner(System.in);
int num2 = scanner.nextInt();
int res = num1 / num2;
System.out.println(res);
} catch (Exception e){ // 遇到问题,找出问题
System.out.println("除数不能为零!"); //
解决问题
e.printStackTrace(); //
把问题的内容打印出来
}
System.out.println("后边还有代码呦!");
}
这样也可以让程序继续执行,我们发现我们找出的问题,他叫
Exception,也是的java类。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。