异常产生之后会导致程序中断,异常的处理是为了在发现异常之后程序能够正常的执行完毕。
异常处理关键字: try catch finally
注意:
1.finally不管有没有异常最后都会执行。
2.如果异常没有进行正确的捕获,程序也会导致中断(finally依然执行)

异常处理流程

1.一旦程序执行中产生了异常之后,将自动进行指定类型的异常类对象实例化处理。
2.如果没有提供异常处理的支持,则会采用JVM默认异常处理方式,首先进行异常信息打印,然后程序中断处理
3.如果有异常处理,被try语句捕获。
4.捕获到异常之后,与catch进行匹配,匹配运行catch的异常处理,如果不匹配则没有任何catch处理。
5.最终执行finally代码,执行完之后会进一步判断当前异常是否处理过,如果处理过继续执行其他代码,如果没有处理,由JVM进行默认处理。

在进行多异常同时处理的时候,要把捕获范围大的异常放在捕获范围小的异常之后。

throws

强制调用处进行异常处理。

  1. package com.test;
  2. class test{
  3. public static void printString() throws Exception{
  4. System.out.println("hello");
  5. }
  6. }
  7. public class Demo {
  8. public static void main(String[] args) {
  9. try {
  10. test.printString();//由于方法加上了throws,调用时必须加上try-catch,否则会报错。
  11. } catch (Exception e) {
  12. // TODO Auto-generated catch block
  13. e.printStackTrace();
  14. }
  15. }
  16. }
  17. /*=========================================================================================*/
  18. class test{
  19. public static void printString() throws Exception{
  20. System.out.println("hello");
  21. }
  22. }
  23. public class Demo {
  24. public static void main(String[] args) throws Exception {//免去了try-catch
  25. test.printString();
  26. }
  27. }

throw关键字

手工进行异常抛出。

实例:

  1. package com.test;
  2. class MyMath{
  3. public static int div(int x,int y) throws Exception{
  4. int temp = 0;
  5. System.out.println("除法计算开始");//网络连接开始
  6. try {
  7. temp = x/y;
  8. }
  9. catch(Exception e) {
  10. throw e;
  11. }finally {
  12. System.out.println("除法计算结束");//网络连接结束
  13. }
  14. return temp;
  15. }
  16. }
  17. public class Demo {
  18. public static void main(String[] args) {
  19. try {
  20. MyMath.div(10, 0);
  21. }catch(Exception e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. }

RuntimeException

某些异常类尽管设置了throws关键字,但是使用时可以不进行强制异常处理。例如NumberFormatException和ArithmeticException。这些类的共同特点是继承自java.lang.RuntimeException。