java的异常机制
一、零引发的血案
1、看问题
首先、问大家一个问题:
public static void main(String[] args) { int num1 = 10; Scanner scanner = new Scanner); int num2 = (); int res = num1 / num2; Sy(res); Sy("后边还有代码呦!"); }
请问:如果我输入了 “abc” 或者 0 程序应该怎么运行呢?
abc Exception in thread "main" java.u at java.u(Scanner.java:864) at java.u(Scanner.java:1485) at java.uInt(Scanner.java:2117) at java.uInt(Scanner.java:2076) at cn.i(Demo.java:13) 0 Exception in thread "main" java.lang.ArithmeticException: / by zero at cn.i(Demo.java:14)
程序他在想办法告诉你,你错了!程序是永远找不到女朋友的,因为程序员只有真的是自己错了,他才会承认自己错了。
而且有个很重要的问题,程序碰到异常就不在继续执行后边的代码了,真是悲剧,很明显这不是你想要的。
世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。
2、解决方案
其实这个例子的解决方案至少有两种:
(1)、运行前对参数进行校验
public static void main(String[] args) { int num1 = 10; Scanner scanner = new Scanner); int num2 = (); if (num2 == 0){ Sy("除数不能为零"); return; } int res = num1 / num2; Sy(res); Sy("后边还有代码呦!"); }
这样是不是就解决了除数不能为零的问题。
(2)、出了问题想办法解决
public static void main(String[] args) { // 尝试执行 try { int num1 = 10; Scanner scanner = new Scanner); int num2 = (); int res = num1 / num2; Sy(res); } catch (Exception e){ // 遇到问题,找出问题 Sy("除数不能为零!"); // 解决问题 e.printStackTrace(); // 把问题的内容打印出来 } Sy("后边还有代码呦!"); }
这样也可以让程序继续执行,我们发现我们找出的问题,他叫
Exception,也是的java类。