• Java 异常


    异常:就是程序在运行时出现不正常情况。
    异常由来:问题也是现实生活中一个具体的事物,可通过java以类的形式进行描述。并封装成对象。

    一、问题的划分

    1. 严重的问题
      • java通过Error类进行描述。一般不编写针对性的代码对其进行处理。
    2. 非严重的问题
      • java通过Exception类进行描述。可以使用针对性的处理方式进行处理。

    二、异常的处理

    • java 提供了特有的语句进行处理。
    • 一般情况下,函数内出现异常,函数上需要声明。
    • jvm默认的异常处理机制,就是在调用printStackTrace方法(打印异常的堆栈的跟踪信息)
    • 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。
      • 要么在内部try catch处理。
      • 要么在函数上声明让调用者处理。
    try{
    	需要被检测的代码;
    }
    catch(异常类 变量){
    	处理异常的代码;(处理方式)
    }
    //可选
    finally{
    	一定会执行的语句;
    }
    
    
    class Demo {
        int div(int a, int b)throws ArithmeticException//在功能上通过throws的关键字声明了该功能有可能会出现问题。
        {
            return a / b;
        }
    }
    
    class ExceptionDemo {
        public static void main(String[] args) {
            Demo d = new Demo();
            try {
                int x = d.div(4, 0);
                System.out.println("x=" + x);
            } catch (ArithmeticException e)/ArithmeticException e = new ArithmeticException();
            {
                System.out.println("除零啦");
                System.out.println(e.getMessage());
                System.out.println(e.toString());// 异常名称:异常信息。
    
                e.printStackTrace();//异常名称,异常信息,异常出现的位置。
            }
            System.out.println("over");
        }
    }
    

    运行结果:
    除零啦
    / by zero
    java.lang.ArithmeticException: / by zero
    java.lang.ArithmeticException: / by zero
    at Demo.div(Test.java:54)
    at Test.main(Test.java:66)
    over

    对多异常的处理

    1. 声明异常时,建议声明更为具体的异常。这样处理的可以更具体。
    2. 对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。
    3. 如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

    自定义异常

    当出现的特有问题未被java所描述并封装对象。可以按照java对问题封装的思想,将特有的问题进行自定义的异常封装。

    如何定义异常信息呢?

    因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时,将异常信息传递给父类通过super语句。
    那么就可以直接通过getMessage方法获取自定义的异常信息。

    • 必须是自定义类继承Exception。

    throws和throw的区别

    • throws 使用在函数上。后面跟多个异常类,用逗号隔开。
    • throw 使用在函数内。后面跟的是异常对象。
    class FuShuException extends Exception //getMessage();
    {
        private int value;
        
        FuShuException(String msg, int value) {
            super(msg);
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    
    }
    
    
    class Demo {
        int div(int a, int b) throws FuShuException {
            if (b < 0) {
                throw new FuShuException("出现了除数是负数的情况------ / by fushu", b);//手动通过throw关键字抛出一个自定义异常对象。
            }
            return a / b;
        }
    }
    
    
    class Test {
        public static void main(String[] args) {
            Demo d = new Demo();
            try {
                int x = d.div(4, -9);
                System.out.println("x=" + x);
            } catch (FuShuException e) {
                System.out.println(e.toString());
                System.out.println("错误的负数是:" + e.getValue());
            }
            System.out.println("over");
    
        }
    }
    

    运行结果:
    FuShuException: 出现了除数是负数的情况------ / by fushu
    错误的负数是:-9
    over

  • 相关阅读:
    android-sdk环境变量配置
    2018/08/04
    python 读取配置文件ini ---ConfigParser
    关于自动化测试框架搭建的前期考虑问题
    Jmeter中用例禁用
    Jmeter创建一个http请求
    基本的sql语法
    sql创建表格时出现乱码
    Jmeter安装
    Java环境搭建
  • 原文地址:https://www.cnblogs.com/hen-java/p/12601831.html
Copyright © 2020-2023  润新知