文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【JAVA 异常处理机制】

2023-08-23 08:53

关注

前言

在Java编程中,异常处理是一种重要的机制,用于处理程序运行时可能出现的错误和异常情况。异常处理机制可以帮助开发者优雅地处理异常,提高程序的健壮性和可靠性。


提示:以下是本篇文章正文内容,下面案例可供参考

1.java异常处理机制

2.try-catch

package exception;public class TryCatchDemo {    public static void main(String[] args) {        System.out.println("程序开始了...");                try {//            String str = null;//            String str = "";            String str = "a";                    System.out.println(str.length());//抛出空指针异常            System.out.println(str.charAt(0));            System.out.println(Integer.parseInt(str));                        System.out.println("!!!!!!!!!!!!!!");//        }catch(NullPointerException e){//            //这里实际开发中是写补救措施的,通常也会将异常信息输出便于debug//            System.out.println("出现了空指针,并解决了!");//        }catch(StringIndexOutOfBoundsException e){//            System.out.println("处理字符串下标越界问题!");//        }                }catch(NullPointerException|StringIndexOutOfBoundsException e){            System.out.println("处理空指针或下标越界!");                }catch(Exception e){            System.out.println("反正就是出了个错!");        }        System.out.println("程序结束了...");    }}

3.finally块

finally块是异常处理机制中的最后一块

package exception;public class FinallyDemo {    public static void main(String[] args) {        System.out.println("程序开始了");        try {            String str = "null";            System.out.println(str.length());            return;//结束方法,结束前finally还是要执行的        } catch (Exception e) {            System.out.println("出错了");        }finally {            System.out.println("finally中的代码执行了");        }        System.out.println("程序结束了");    }}

在IO中的应用

package exception;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class FinallyDemo2 {    public static void main(String[] args) {        FileOutputStream fos = null;        try {            fos = new FileOutputStream("./fos.dat");            fos.write(1);        } catch (IOException e) {            System.out.println("出错了");        } finally {            try {                if(fos!=null) {                    fos.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }}

4.自动关闭特性

JDK7之后java推出了一个新特性:自动关闭特性可以更优雅的在异常处理机制中关闭IO
语法

try(   声明并初始化IO对象){   IO操作}catch(IOException e){//catch各种IO异常   ...}

package exception;import java.io.FileOutputStream;import java.io.IOException;public class AutoCloseableDemo {    public static void main(String[] args) {        //自动关闭特性是编译器认可的,编译后就变成FinallyDemo2的样子        try(                FileOutputStream fos = new FileOutputStream("fos.dat");        ){            fos.write(1);        } catch (IOException e) {            e.printStackTrace();        }    }}

5.throw关键字

throw用来对外主动抛出一个异常,通常下面两种情况我们主动对外抛出异常:

package exception;public class Person {    private int age;    public int getAge() {        return age;    }    public void setAge(int age) throws Exception {        if(age<0||age>100){            //使用throw对外抛出一个异常            throw new RuntimeException("年龄不合法!");        }        this.age = age;    }}
package exception;public class ThrowDemo {    public static void main(String[] args) {        Person p = new Person();        p.setAge(10000);//符合语法,但是不符合业务逻辑要求。        System.out.println("此人年龄:"+p.getAge());    }}

6.throws关键字

throws用来在声明方法时同时声明该方法可能抛出的异常,用于通知调用方添加处理该异常的手段。
当一个方法中使用throw抛出一个非RuntimeException的异常时,就要在该方法上使用throws声明这个异常的抛出。此时调用该方法的代码就必须处理这个异常,否则编译不通过。

package exception;public class Person {    private int age;    public int getAge() {        return age;    }        public void setAge(int age) throws Exception {        if(age<0||age>100){            //使用throw对外抛出一个异常//            throw new RuntimeException("年龄不合法!");            //除了RuntimeException之外,抛出什么异常就要在方法上声明throws什么异常            throw new Exception("年龄不合法!");        }        this.age = age;    }}

当我们调用一个含有throws声明异常抛出的方法时,编译器要求我们必须处理这个异常,否则编译不通过。 处理手段有两种:

package exception;public class ThrowDemo {    public static void main(String[] args){        System.out.println("程序开始了...");        try {            Person p = new Person();                        p.setAge(100000);//典型的符合语法,但是不符合业务逻辑要求            System.out.println("此人年龄:"+p.getAge()+"岁");        } catch (Exception e) {            e.printStackTrace();        }        System.out.println("程序结束了...");    }}

注意,永远不应当在main方法上使用throws!!

7.throws的重写规则

当一个子类重写超类含有throws声明异常抛出的方法时,针对throws的重写规则

package exception;import java.awt.*;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.SQLException;public class ThrowsDemo {    public void dosome()throws IOException, AWTException {    }}class SubClass extends ThrowsDemo{//    public void dosome()throws IOException, AWTException {//    }    //允许不再抛出任何异常//    public void dosome(){//    }    //允许仅抛出部分异常//    public void dosome()throws IOException{//    }    //允许抛出超类方法声明抛出异常的子类型异常//    public void dosome()throws FileNotFoundException {//    }    //不允许抛出额外异常(超类方法没有声明的且不存在继承关系的)//    public void dosome()throws SQLException {//    }    //不允许抛出超类方法抛出异常的超类型异常//    public void dosome()throws Exception {//    }}

8.异常分类

9.异常API

Exception上有一些常用的方法

package exception;public class ExceptionAPIDemo {    public static void main(String[] args) {        System.out.println("程序开始了");        try {            String str = "abc";            System.out.println(Integer.parseInt(str));        } catch (NumberFormatException e) {            //输出错误堆栈跟踪信息便于程序员找到错误根源,分析错误原因制定B计划            e.printStackTrace();//输出错误信息            //错误消息多用于提示给用户或记录日志使用            String message = e.getMessage();//获取错误消息            System.out.println(message);        }        System.out.println("程序结束了");    }}

10.自定义异常

自定义异常通常用来定义那些业务上的异常问题
定义自定义异常需要注意以下问题:

package exception;public class IllegalAgeException extends Exception{    public IllegalAgeException() {    }    public IllegalAgeException(String message) {        super(message);    }    public IllegalAgeException(String message, Throwable cause) {        super(message, cause);    }    public IllegalAgeException(Throwable cause) {        super(cause);    }    public IllegalAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {        super(message, cause, enableSuppression, writableStackTrace);    }}
package exception;public class Person {    private int age;    public int getAge() {        return age;    }        public void setAge(int age) throws IllegalAgeException {        if(age<0||age>100){            //使用throw对外抛出一个异常//            throw new RuntimeException("年龄不合法!");            //除了RuntimeException之外,抛出什么异常就要在方法上声明throws什么异常//            throw new Exception("年龄不合法!");            //抛出自定义异常            throw new IllegalAgeException("年龄超范围:"+age);        }        this.age = age;    }}
package exception;public class ThrowDemo {    public static void main(String[] args){        System.out.println("程序开始了...");        try {            Person p = new Person();                        p.setAge(100000);//典型的符合语法,但是不符合业务逻辑要求            System.out.println("此人年龄:"+p.getAge()+"岁");        } catch (IllegalAgeException e) {            e.printStackTrace();        }        System.out.println("程序结束了...");    }}

总结:

java异常处理机制:

try语句块用来包含可能出错的代码片段.

catch用来捕获并处理对应的异常,可以定义多个,也可以合并多个异常在一个catch中.

finally是异常的最后一块,只要程序执行到try中则必走。一般用于释放资源这类操作.

throw用于主动对外抛出异常。要么是满足语法不满足业务主动抛出异常,要么就是实际发生了异常但是不应当在当前代码片段被解决时抛出。具体情况要结合实际业务分析.

throws用于在方法声明时声明该异常的抛出,使得调用者必须处理该异常.

来源地址:https://blog.csdn.net/weixin_72847531/article/details/131949698

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯