• JAVA学习---异常


    1.认识异常

    使程序的正常流程和错误分开处理,促使程序正确的运行,避免崩溃。

    1.1了解Java异常

    异常的来源:一是程序运行时发生了异常,由下图生成异常实例并抛出,二是开发者来源throw关键字完成抛出,主要是用于提供异常信息

    处理动作:抛出异常和捕获异常(调用适合的处理方法)

    1.2异常类的继承关系

    父类都是Throwable,其子类才可以通过JVM或特定语句抛出异常,主要包括以Exception和Error两种

    2.异常的处理---捕获处理异常

    2.1异常处理过程

    2.2 try…catch…finally语句

    (try…catch结构、try…finally结构、try…catch…finally结构)

    2.3 Java7的改进

    (允许语句同时捕捉多个可能异常类)

    3.常见应用

    3.1获取异常信息

    方法名

    说明

    String getMessage()

    返回Throwable的详细消息字符串

    printStackTrace()

    方法将Throwable对象的堆栈跟踪输出至错误输出流

    String toString()

    返回Throwable的简短描述(描述与定位)

    3.2异常的作用和使用原则

    获得异常信息与恢复出错的程序使之能够正常运行

    3.3常见的异常类

    异常类

     说明

    ArithmeticException

     算术异常

    NullPointerException

     空指针异常。调用了未初始化的或不存在的对象

    ArrayIndexOutOfBoundsException

     数组下表越界异常。使用的下标超过最大索引值

    ClassNotFoundException

     指定的类不存在。引用的包名或类名错误

    ClassCastException

     类转化异常。强制转换数据类型不兼容

    NumberFormatException

     字符串转换数字异常。字符串转换数字错误

    FileNotFoundException

     文件未找到异常。打开文件失败

    EOFException

     输入过程意外到达文件末尾或流尾

    IOException

     I/O操作意外中断或失败

    SQLException

     数据库访问错误

    //try...catch...finally
    public class NException {
        static int[]getValue(){
            int[] arry = new int[4];
            for (int i = 0; i < arry.length; i++) {
                arry[i] = (int)(Math.random() * 10);
            }
            return arry;
        }
        
        public static void main(String[] args) {
            int nnum = 9, nresult = 0;
            int[] arry = NException.getValue();
            Exception ex = null;
            try {
                for (int i = 0; i < arry.length; i++) {
                    nresult = nnum/arry[i];
                    System.out.println("nResult的值是:" + nresult + "---数组元素的值是:" + arry[i]);
                }
            } catch (ArithmeticException e) {
                ex = e;
                e.printStackTrace();   //输出堆栈错误信息
                // TODO: handle exception
            }
            finally {
                if(ex != null) {
                    System.out.println("进入finally:");
                    int[] arry1 = NException.getValue();
                    try {
                        for (int i = 0; i < arry1.length; i++) {
                            nresult = nnum/arry[i];
                            System.out.println("出现异常,重新计算nResult的值是:" + nresult + "---数组元素的值是:" + arry1[i]);
                        }
                    } catch (ArithmeticException e) {
                        // TODO: handle exception
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    4.异常的抛出

    4.1方法头中的throws关键字

    方法中可能发生的异常

    [(访问修饰符) (修饰符)] 返回值类型 方法名([参数列表])[throws 异常类1, 异常类2, 异常类n]{
    //具体
    }

    4.2方法体中的throw语句

    方法中有意识的抛出异常,2种对应处理方法

    throw 异常实例名;

    5.自定义异常

    5.1自定义异常的方法

    [修饰符] class 自定义异常类名 extends Exception{...}
    

     

    //自定义异常
    public class MyNumExcption extends Exception{
        public MyNumExcption(String msg) {
            super(msg);
        }
    }
    
    import java.util.Scanner;
    //计算圆面积
    public class CircularArea {
        static double getArea(double r) throws MyNumExcption{
            if (r < 0) { //抛出异常
                throw new MyNumExcption("圆半径不应当小于0!");//异常
            }
            double area = 3.14 * r * r;
            return area;
        }
        
        public static void main(String[] args) {
            double r = 0;
            double area = -1;
            Scanner input = new Scanner(System.in); //获取半径输入
            System.out.println("输入半径:");
            r = Double.parseDouble(input.next()); 
            try {
                area = getArea(r);
            } catch (MyNumExcption e) { //捕获异常
                // TODO: handle exception
                System.out.println(e);
            }
            System.out.println("圆面积是:" + area);
        }
    }

     

  • 相关阅读:
    XPATH基本语法
    为博客园添加目录、导航的方法总结
    性能测试学习之路 (三)jmeter常见性能指标(相关术语、聚合报告 && 服务器性能监控配置 && 图形结果 && 概要报告)
    性能测试学习之路 (二)jmeter详解(jmeter执行顺序 && 作用域 && 断言 && 事务 &&集合点 )
    性能测试学习之路 (一)认识jmeter(性能测试流程 && 性能测试通过标准 &&jmeter体系结构)
    Mysql基础知识
    索引优化之Explain 及慢查询日志
    shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)
    Mysql 逻辑架构图及日志系统
    react ,ant Design UI中table组件合并单元格并展开详情的问题
  • 原文地址:https://www.cnblogs.com/zouhq/p/10542744.html
Copyright © 2020-2023  润新知