1.什么是异常?
答:就是在程序运行的过程中所发生的不正常行为,中断正在运行的程序。
2.异常处理关键字:try、catch、finally、throw和throws
(1)try-catch块
1 public static void main(String[] args) { 2 try { 3 //研发:临界值的问题 4 Scanner in = new Scanner(System.in); 5 System.out.print("请输入被除数:"); 6 int num1 = in.nextInt(); 7 System.out.print("请输入除数:"); 8 int num2 = in.nextInt(); 9 System.out.println(String.format("%d / %d = %d", 10 num1, num2, num1/ num2)); 11 12 } catch (NullPointerException ex) { 13 System.out.println("除数不能为0"); 14 }catch (ArithmeticException ex) { 15 ex.printStackTrace(); 16 System.out.println(ex.getMessage()); 17 System.out.println("除数不能为0===ArithmeticException"); 18 }catch (Exception ex) { 19 System.out.println("除数不能为0===Exception"); 20 21 }
如果try语句在 执行时发生异常,并且这个异常与catch中声明的异常类型相匹配,那么try中的剩余代码将被忽略,而相应的catch将被执行。
如果输入的除数为0,则运行的结果:
如果try语句在执行的过程中遇到异常,而抛出的异常在catch块里没有被声明,程序直接退出。
(2)try-catch-finally
在try-catch块后加入finally块,无论是否发生异常,finally块中的代码都能被执行。
1 public static void main(String[] args) { 2 try { 3 //研发:临界值的问题 4 Scanner in = new Scanner(System.in); 5 System.out.print("请输入被除数:"); 6 int num1 = in.nextInt(); 7 System.out.print("请输入除数:"); 8 int num2 = in.nextInt(); 9 System.out.println(String.format("%d / %d = %d", 10 num1, num2, num1/ num2)); 11 12 } catch (NullPointerException ex) { 13 System.out.println("除数不能为0"); 14 }catch (ArithmeticException ex) { 15 ex.printStackTrace(); 16 System.out.println(ex.getMessage()); 17 System.out.println("除数不能为0===ArithmeticException"); 18 }catch (Exception ex) { 19 System.out.println("除数不能为0===Exception"); 20 } 21 finally{ 22 //释放稀缺资源。 23 System.out.println("感谢使用本程序!"); 24 } 25
3.运行时的异常图: