• Java之异常处理


    异常: 用于处理程序中错误的一种机制

    1. 捕获和处理异常:

    try...catch...finally

    我们直接上代码:

     1 package com.learn.chap04.sec02;
     2 
     3 public class Demo1 {
     4     public static void main(String[] args) {
     5         String str = "123q";
     6         // 捕获和处理异常
     7         try{
     8             int a = Integer.parseInt(str);
     9         }catch(NumberFormatException e){
    10             //e.getMessage(); // 打印日志
    11             e.printStackTrace();
    12         }catch(Exception e){ // catch中 范围依次从小到大,NumberFormatException和Exception交换位置后,将报错
    13             e.printStackTrace();
    14         }
    15         
    16         System.out.println("aa"); // 由于上面代码做了异常捕捉和处理,并且没有return,所以此处将被打印出来
    17         
    18     }
    19 }

    运行结果

    aa
    java.lang.NumberFormatException: For input string: "123q"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.learn.chap04.sec02.Demo1.main(Demo1.java:8)

     1 package com.learn.chap04.sec02;
     2 
     3 public class Demo2 {
     4     
     5     public static void testFinally(){
     6         String str = "123a";
     7         try {
     8             int a = Integer.parseInt(str);
     9             System.out.println(a);
    10         } catch (Exception e) {
    11             e.printStackTrace();
    12             System.out.println("exception");
    13             return; // 下面的代码System.out.println("end");将不执行  
    14         }finally{ // 无论有没有异常,try...catch中有没有return,finally里的代码 都会被执行;这就是finally的作用。这个作用比喻:可在程序运行后关闭文件,不管运行结果如何都关闭文件,就可以用这一条语句。但可以用exit函数退出再不执行finally语句。比喻将return换成System.exit(0);就可以不执行
    15             System.out.println("finally end");
    16         }
    17         System.out.println("end"); // 由于上面代码出现return,所以此处将无法被打印出来
    18     }
    19     
    20     public static void main(String[] args) {
    21         testFinally();
    22     }
    23 }

    运行结果

    java.lang.NumberFormatException: For input string: "123a"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.learn.chap04.sec02.Demo2.testFinally(Demo2.java:8)
    at com.learn.chap04.sec02.Demo2.main(Demo2.java:21)
    exception
    finally end

    2.throws和throw关键字:

    throws 表示当前方法不处理异常,而是交给方法的调用处去处理;

    throw 表示直接抛出一个异常

    我们直接上代码:

     1 package com.learn.chap04.sec03;
     2 
     3 public class Demo1 {
     4 
     5     /**
     6      * 把异常向外面抛
     7      * @throws Exception
     8      */
     9     public static void testThrows() throws Exception{
    10         String str = "123a";
    11         int a = Integer.parseInt(str);
    12         System.out.println(a);
    13     }
    14     
    15     /*public static void main(String[] args) {
    16         testThrows();
    17     }*/
    18     public static void main(String[] args) {
    19         try {
    20             testThrows();
    21             System.out.println("here");
    22         } catch (Exception e) {
    23             System.out.println("我们在这里抛出了异常");
    24             e.printStackTrace();
    25         }
    26         System.out.println("输出内容");
    27     }
    28     
    29 }

    运行结果

    我们在这里抛出了异常
    java.lang.NumberFormatException: For input string: "123a"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.learn.chap04.sec03.Demo1.testThrows(Demo1.java:11)
    at com.learn.chap04.sec03.Demo1.main(Demo1.java:20)
    输出内容

     1 package com.learn.chap04.sec03;
     2 
     3 public class Demo2 {
     4 
     5     public static void testThrow(int a) throws Exception{
     6         if(a==1){
     7             throw new Exception(a+"有异常");
     8         }
     9         System.out.println(a+"无异常");
    10     }
    11     
    12     public static void main(String[] args) {
    13         try {
    14             testThrow(1);
    15         } catch (Exception e) {
    16             e.printStackTrace();
    17         }
    18         
    19         try {
    20             testThrow(0);
    21         } catch (Exception e) {
    22             e.printStackTrace();
    23         }
    24     }
    25 }

    运行结果

    java.lang.Exception: 1有异常
    at com.learn.chap04.sec03.Demo2.testThrow(Demo2.java:7)
    at com.learn.chap04.sec03.Demo2.main(Demo2.java:14)
    0无异常

    3.Exception与RuntimeException的区别:

    我们直接上代码

     1 package com.learn.chap04.sec04;
     2 
     3 public class Demo1 {
     4 
     5     /**
     6      * 运行时异常,编译时不检查,可以不使用try..catch捕获
     7      */
     8     public static void testRuntimeException() throws RuntimeException{
     9         throw new RuntimeException("运行时异常");
    10     }
    11     
    12     /**
    13      * Exception异常,编译时会检查,必须使用使用try..catch捕获
    14      */
    15     public static void testException() throws Exception{
    16         throw new Exception("Exception异常");
    17     }
    18     
    19     public static void main(String[] args) {
    20         //testRuntimeException();
    21         try {
    22             testRuntimeException();
    23         } catch (Exception e) {
    24             // TODO: handle exception
    25             e.printStackTrace();
    26         }// 此处若不加try...catch 由于出现异常,下面代码将不执行
    27         
    28         try {
    29             testException();
    30         } catch (Exception e) {
    31             // TODO Auto-generated catch block
    32             e.printStackTrace();
    33         }
    34     }
    35 }

    运行结果

    java.lang.RuntimeException: 运行时异常
    at com.learn.chap04.sec04.Demo1.testRuntimeException(Demo1.java:9)
    at com.learn.chap04.sec04.Demo1.main(Demo1.java:22)
    java.lang.Exception: Exception异常
    at com.learn.chap04.sec04.Demo1.testException(Demo1.java:16)
    at com.learn.chap04.sec04.Demo1.main(Demo1.java:29)

    4. 自定义异常类

    直接上代码

     1 package com.learn.chap04.sec05;
     2 /**
     3  * 自定义异常 继承Exception
     4  * @author eagle
     5  *
     6  */
     7 public class CustomException extends Exception {
     8     public CustomException(String message){
     9         super(message);
    10     }
    11 }
     1 package com.learn.chap04.sec05;
     2 
     3 public class TestCustomException {
     4     public static void test() throws CustomException{
     5         throw new CustomException("自定义异常");
     6     }
     7     
     8     public static void main(String[] args) {
     9         try {
    10             test();
    11         } catch (Exception e) {
    12             // TODO: handle exception
    13             e.printStackTrace();
    14         }
    15     }
    16 }

    运行结果

    com.learn.chap04.sec05.CustomException: 自定义异常
    at com.learn.chap04.sec05.TestCustomException.test(TestCustomException.java:5)
    at com.learn.chap04.sec05.TestCustomException.main(TestCustomException.java:10)

  • 相关阅读:
    Hibernatede 一对多映射配置
    Hibrenate之事务的理解以及代码编写
    The servlet name already exists.解决方法
    hibernate入门程序
    什么是orm思想?
    Java的MVC模式简介
    JAVA框架之Hibernate框架的学习步骤
    java常见命名规则
    解决get方法提交参数中文乱码问题:
    谈谈对Spring IOC(控制反转)的理解--转
  • 原文地址:https://www.cnblogs.com/eaglezb/p/5965637.html
Copyright © 2020-2023  润新知