9.1.1 什么是异常

异常指的是程序运行时出现的非正常情况或错误
异常原因:数组下标越界、算术运算被0除、空指针访问等

  1. 从命令行输入2整数,求它们的和。
  2. public class testException {
  3. public static void main(String args[]) {
  4. int x=Integer.parseInt(args[0]);
  5. int y=Integer.parseInt(args[1]);
  6. System.out.println(x+"+"+y+"="+(x+y));
  7. }
  8. }
  9. 1)正常运行示例:
  10. java testException 23 45
  11. 输出结果:
  12. 23+45=68
  13. 2)错误运行现象1,忘记输入命令行参数
  14. 例如:java testException
  15. 则在控制台将显示数组访问越界的错误信息:
  16. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
  17. at testException.main(testException.java:3)
  18. 3)错误运行现象2,输入的命令行参数不是整数
  19. 例如:java testException 3 3.4
  20. 则在控制台将显示数字格式错误的异常信息:
  21. Exception in thread "main" java.lang.NumberFormatException: For input string: "3.4" at java.lang.NumberFormatException.forInputString(NumberFormat
  22. Exception.java:48) at java.lang.Integer.parseInt(Integer.java:435) at java.lang.Integer.parseInt(Integer.java:476)
  23. solution:
  24. 处理方法1:用传统的防错处理办法检测输入参数是否达到2个,未达到给出提示。
  25. public class testException {
  26. public static void main(String args[]) {
  27. if (args.length<2) {
  28. System.out.println("usage: java testException int int ");
  29. } else {
  30. int x=Integer.parseInt(args[0]);
  31. int y=Integer.parseInt(args[1]);
  32. System.out.println(x+"+"+y+"="+(x+y));
  33. }
  34. }
  35. }
  36. 处理方法2:利用异常机制。
  37. public class testException {
  38. public static void main(String args[]) {
  39. try {
  40. try块中的代码如果出现异常,则流程将发生变化。
  41. int x=Integer.parseInt(args[0]);
  42. int y=Integer.parseInt(args[1]);
  43. System.out.println(x+"+"+y+"="+(x+y));
  44. } catch ( ArrayIndexOutOfBoundsException e) {
  45. System.out.println("usage: java testException int int ");
  46. }
  47. } try块执行中出现异常,由catch块捕获处理
  48. }

image.png

9.1.3 系统定义的异常

常见系统定义的异常 异常的解释
ClassNotFoundException 未找到要装载的类
ArrayIndexOutOfBoundsException 数组访问越界
FileNotFoundException 文件找不到
IOException 输入、输出错误
NullPointerException 空指针访问
ArithmeticException 算术运算错误,如除数为0
NumberFormatException 数字格式错误
InterruptedException 中断异常,线程在进行暂停处理时(如:睡眠)
被调度打断将引发该异常。