zoukankan      html  css  js  c++  java
  • Java异常处理

    source:http://blog.java1234.com/index.html?typeId=1

    异常:程序在执行过程中,出现意外;类似开车路上出了交通事故;

    在java中,我们用try-catch来捕获异常 

    try...cacth...finally

    //Exception是异常类的老祖宗,在捕获异常的时候,假如不确定会抛出什么异常,可以写多个异常捕获:注意 由上往下的异常 必须范围同级别或者更高;否则编译报错;
    public static void main(String[] args) {
            String str="123a";
            try{
                int a=Integer.parseInt(str);          
            }catch(NullPointerException e){
                e.printStackTrace();
            }catch(NumberFormatException e){
                e.printStackTrace();
            }catch(Exception e){
                e.printStackTrace();
            }
            System.out.println("继续执行");
    }

    try...cacth...finally 假如有某种需求,不管有没有发生异常,比如执行某些代码,这时候,finally就派上用场了;

    public class Demo {
     
        public static void testFinally(){
            String str="123a";
            try{
                int a=Integer.parseInt(str);
                System.out.println(a);
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("exception");
                return;
            }finally{
                System.out.println("finally end");
            }
            System.out.println("end");
        }
         
        public static void main(String[] args) {
            testFinally();
        }
    }

    运行输出:

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

    throws和throw关键字

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

    throw表示直接抛出一个异常;

    public class Demo {
     
        /**
         * 把异常向外面抛
         * @throws NumberFormatException
         */
        public static void testThrows()throws NumberFormatException{
            String str="123a";
            int a=Integer.parseInt(str);
            System.out.println(a);
        }
         
        public static void main(String[] args) {
            try{
                testThrows();  
                System.out.println("here");
            }catch(Exception e){
                System.out.println("我们在这里处理异常");
                e.printStackTrace();
            }
            System.out.println("I'm here");
        }
    }

    运行输出:

    我们在这里处理异常
    java.lang.NumberFormatException: For input string: "123a"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:580)
        at java.lang.Integer.parseInt(Integer.java:615)
        at com.java1234.chap04.sec03.Demo1.testThrows(Demo1.java:11)
        at com.java1234.chap04.sec03.Demo1.main(Demo1.java:17)
    I'm here
    public class Demo {
     
        public static void testThrow(int a) throws Exception{
            if(a==1){
                // 直接抛出一个异常类
                throw new Exception("有异常");
            }
            System.out.println(a);
        }
         
        public static void main(String[] args) {
            try {
                testThrow(1);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    运行输出:

    1 java.lang.Exception: 有异常
    2     at com.java1234.chap04.sec03.Demo2.testThrow(Demo2.java:8)
    3     at com.java1234.chap04.sec03.Demo2.main(Demo2.java:15)

    Exception 和 RuntimeException 区别

    Exception是检查型异常,在程序中必须使用try...catch进行处理;

    RuntimeException是非检查型异常,例如NumberFormatException,可以不使用try...catch进行处理,但是如果产生异常,则异常将由JVM进行处理;

    RuntimeException最好也用try...catch捕获;

     1 public class Demo1{
     2  
     3     /**
     4      * 运行时异常,编译时不检查,可以不使用try...catch捕获
     5      * @throws RuntimeException
     6      */
     7     public static void testRuntimeException()throws RuntimeException{
     8         throw new RuntimeException("运行时异常");
     9     }
    10      
    11     /**
    12      * Exception异常,编译时会检查,必须使用try...catch捕获
    13      * @throws Exception
    14      */
    15     public static void testException()throws Exception{
    16         throw new Exception("Exception异常");
    17     }
    18      
    19     public static void main(String[] args) {
    20         try {
    21             testException();
    22         } catch (Exception e) {
    23             // TODO Auto-generated catch block
    24             e.printStackTrace();
    25         }
    26          
    27         testRuntimeException();
    28     }
    29 }

    运行输出:

    java.lang.Exception: Exception异常

    at com.java1234.chap04.sec04.Demo1.testException(Demo1.java:18)

    at com.java1234.chap04.sec04.Demo1.main(Demo1.java:23)

    Exception in thread "main" java.lang.RuntimeException: 运行时异常

    at com.java1234.chap04.sec04.Demo1.testRuntimeException(Demo1.java:10)

    at com.java1234.chap04.sec04.Demo1.main(Demo1.java:29)

    自定义异常

    自定义异常要继承自Exception;

     1 /**
     2  * 自定义异常,继承自Exception
     3  * @author user
     4  *
     5  */
     6 public class CustomException extends Exception{
     7  
     8     public CustomException(String message) {
     9         super(message);
    10     }
    11  
    12 }
    13 public class TestCustomException {
    14  
    15     public static void test()throws CustomException{
    16         throw new CustomException("自定义异常");
    17     }
    18      
    19     public static void main(String[] args) {
    20         try {
    21             test();
    22         } catch (CustomException e) {
    23             // TODO Auto-generated catch block
    24             e.printStackTrace();
    25         }
    26     }
    27 }

    运行输出:

    com.java1234.chap04.sec05.CustomException: 自定义异常

    at com.java1234.chap04.sec05.TestCustomException.test(TestCustomException.java:6)

    at com.java1234.chap04.sec05.TestCustomException.main(TestCustomException.java:11)

  • 相关阅读:
    20165322 第九周 实现mypwd
    20165322 第七周 mybash 的实现
    2018-2019-1 20165322 实验三 实时系统
    2018-2019-1 20165318 20165322 20165326 实验二 固件程序设计
    2018-2019-1 20165322 《信息安全系统设计基础》第六周学习总结
    codeblocks汉化
    2019-2020-1 20175334 实验五 《通讯协议设计》实验报告
    2019-2020-1 20175334 20175322 20175315 实验四 外设驱动程序设计
    2019-2020-1 20175315 20175322 20175334 实验三 实时系统
    2019-2020-1 20175334 20175322 20175315 实验二 固件程序设计
  • 原文地址:https://www.cnblogs.com/CareyZhao/p/10329774.html
Copyright © 2011-2022 走看看