ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

异常

2022-08-16 22:31:43  阅读:173  来源: 互联网

标签:Exception System catch println 异常 out


一、异常、错误概念:

异常:(Exception)程序本身可以克服和恢复的问题,遇到异常建议捕获处理异常,是程序基础正常执行,如:空指针异常、算数异常、下标越界异常等等,异常并不是代码语法错误。

错误:(Error)不能处理的问题,程序本身无法克服和恢复的严重问题,遇到错误,建议终止程序执行,如:栈溢出错误等等。

异常处理的好处:

提高代码容错性和健壮性;

将业务功能代码和异常处理代码分离。

二、异常体系:

  • 父类:Throwable(lang)
  • 子类:ErrorException
  • Exception分为 运行时异常检查异常
  • 运行时异常 : RunTimeException该类的所有子类
  • 检查异常 : 运行时异常之外,其他的异常。

三、十个异常:

  • classCastException--------------------------------------类型转换异常
  • nullPointerException------------------------------------空指针异常
  • dateTimeException--------------------------------------日期时间异常
  • IndexOutOfBoundsException------------------------数组下标越界异常
  • ArithmeticException-------------------------------------算数错误异常
  • InputMismatchException------------------------------输入不匹配异常
  • SQLException-----------------------------------------------数据库异常
  • IOException-------------------------------------------------IO流异常
  • FileNotFoundException---------------------------------文件未找到异常
  • FileAlreadyExistsException-----------------------------可选特定的异常

四、异常处理机制:

try{
    业务功能代码
}catch(异常类名 变量名){
    异常处理代码
}catch(异常类名 变量名){
    异常处理代码
}
.......
finally{
    异常处理代码
}

 

  • 把可能出现异常的代码放在try中;
  • catch和finally可以只有其中一个;
  • finally中的代码一定会执行。

五、异常处理逻辑

  • 业务功能代码没有抛出异常,执行finally中的代码,程序接着向下正常执行;
  • 业务功能代码抛出异常,try块中抛出异常语句后面的语句不会执行,将抛出的异常类对象依次和catch后面的异常类进行对比,如异常类对象 instanceOf 异常类名 为真,则被该catch捕获,执行该catch后的异常处理代码,再执行finally中的代码,程序接着向下正常执行。
  • 业务功能代码抛出异常,没有被后面的catch捕获,执行finally中的代码,系统将该异常类对象向上抛出。抛给了调用该方法的方法。

六、注意事项:

  • Exception一定要放在最后一个catch中判断;
  • 在try或catch中执行return语句时,在将栈中的地址弹出并返回前会执行finally 中的代码。
public class Exception01 {
    static void f() {
        try {
            Scanner scanner = new Scanner(System.in);
            int a, b;
            System.out.println("请输入两个整数:");
            a = scanner.nextInt();
            b = scanner.nextInt();
            System.out.println(a / b);
            System.out.println("===");
        } catch (ArithmeticException e) {
            System.out.println("捕获算数异常");
        } catch (Exception e) {
            System.out.println("捕获异常");
        } finally {
            System.out.println("一定执行");
        }
        System.out.println("f执行完毕");
    }

    static int g() {
        int a = 1;
        try {
            a = 2 / 0;
            return a;
            //1、将a的表达式的值放在了可以被main方法和g方法都能访问的空间中;
            //2、执行finally语句
            //3、从栈中弹出返回的地址,跳转到该地址执行
        } catch (Exception e) {
            return a;
        } finally {
            a = 3;
            return a;
        }
}

    public static void main(String[] args) {
        try {
            f();
        } catch (InputMismatchException e) {
            System.out.println("捕获输入格式不匹配异常");
        }
        System.out.println("++++++");
        int t = g();
        System.out.println(t);
    }
}

 


七、异常类中常用方法:
  • Exception(String massage):
  • String getMessage():
  • void printStackTrace()://打印栈轨迹
public class Exception02 {
    static void f1(){
        System.out.println("进入f1");
        f2();
        System.out.println("退出f1");
    }
    static void f2(){
        System.out.println("进入f2");
        f3();
        System.out.println("退出f2");
    }
    static void f3(){
        System.out.println("进入f3");
        f4();
        System.out.println("退出f3");
    }
    static void f4(){
        System.out.println("进入f4");
        System.out.println(3 / 0);
        System.out.println("退出f4");
    }
    public static void main(String[] args) {
        Exception exception = new Exception("你好");
        String message = exception.getMessage();
        System.out.println(message);
        try{
            f1();
        }catch (Exception e){
            System.out.println("*****************");
            exception.printStackTrace();
            //创建了线程,在新的线程中打印栈轨迹
        }
        System.out.println("------------------");

    }
}

 


八、自定义异常:
  • 继承Exception,通常是 RuntimeException
  • 可以在自定义异常的构造方法中来调用super(message)来设置和提高getMessage获取消息
九、throw和throws的区别:

throw:

  • throw语句用在方法体内,表示抛出异常,由方法体内的语句处理;
  • throw是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行throw一定是抛出某种异常。

throws:

  • throws语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常处理;
  • throws主要是声明这个方法会抛出某种异常,让他的使用者要知道需要捕获的异常的类型;
  • throws表示出现异常的一种可能型,并不一定会发生这种异常

标签:Exception,System,catch,println,异常,out
来源: https://www.cnblogs.com/l11111/p/16593239.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有