zoukankan      html  css  js  c++  java
  • Java异常处理-捕获和处理异常

    java程序中的异常我们可以捕获然后处理,这样后面的程序就可以继续执行了;

    类似出了交通事故,交警立马出动 拖车的拖车 调解的调解 很快恢复路段行驶;

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

    try...cacth...finally

    前面的代码我们用try...catch...来捕获下

    package com.java1234.chap04.sec01;
     
    public class ExceptionDemo {
     
        public static void main(String[] args) {
            String str="123a";
            try{
                int a=Integer.parseInt(str);          
            }catch(NumberFormatException e){
                e.printStackTrace();
            }
            System.out.println("继续执行");
        }
    }

    我们发现 虽然报错了 但是程序依然继续执行了;

    当然通过查看jdk api,我们发现Exception是异常类的老祖宗,在捕获异常的时候,假如我们不确定会抛出什么异常,

    我们可以写多个异常捕获:

    类似如下代码:

    package com.java1234.chap04.sec02;
     
    public class Demo1 {
     
        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就派上用场了;

    我们给下实例,视频中会详细讲述:

    package com.java1234.chap04.sec02;
     
    public class Demo2 {
     
        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();
        }
    }

    运行输出:

    ava.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

    我们发现 finally里面的都会执行 但是try catch后面的代码未必会执行;

  • 相关阅读:
    SQL Server事务执行一半出错是否自动回滚整个事务 【转】
    html5 canvas做的俄罗斯方块
    laravel-admin 模型创建、数据迁移、以及关联模型控制器
    laravel-admin 安装
    Composer 安装时要求输入授权用户名密码?
    查找mysql中未提交的事务
    SSH 登录时出现如下错误:No supported key exchange algorithms
    MySQL运行一段时间后自动停止问题的排查
    浅谈PHP中的数组和JS中的数组
    MySQL中使用group_concat()函数数据被截取(有默认长度限制),谨慎!
  • 原文地址:https://www.cnblogs.com/xyg-zyx/p/9833392.html
Copyright © 2011-2022 走看看