zoukankan      html  css  js  c++  java
  • Java第二十二天,异常

    异常

    程序在执行过程中,出现的非正常的情况,最终会导致JVM非正常停止。

    注意:

    1. 在Java等面向对象编程语言当中,异常本身是一个类,产生异常的本质就是抛出一个异常对象。Java对异常采取中断处理方式。
    2. Throwable类是所有错误类和异常类的超类。Throwable类有两大子类——ErrorException.
    3. Error是错误,是程序员所无法处理的错误。Exception是异常,异常产生后程序员可以通过代码纠正异常。
    4. Exception的子类一般都是编译器异常,但是有一个特殊的子类 RuntimeException ,它是运行期异常
    5. 处理异常的方式有两种,一种是throws抛出异常,一种是try、catch抓取并且处理异常。

    重要知识点:

    Throwable中定义了处理异常的三个方法,分别是:

    String getMessage();

    返回此 throwable 的详细消息字符串。

    String toString();

    返回此 throwable 的简短描述。

    void printStackTrace();

    将此 throwable 及其追踪输出至标准错误流。

    throw用法

    1. throw关键字必须写在方法的内部,后面跟的是异常对象名。
    2. 能且只能抛出一个对象名。
    3. throw后边new的对象必须是Exception或者是Exception的子类对象。
    4. throw只是单纯的抛出异常
    5. throw关键字抛出指定的异常对象,我们就必须处理这个异常对象(如果创建的是RuntimeException或者它的子类对象就可以选择不处理,留给JVM处理)。
    6. 如果throw后面创建的是编译异常(写代码时就报错),我们就必须处理这个异常。

    throws用法

    1. throws关键字用在方法声明处,具体位于方法大括号前面。
    2. throws关键字声明的异常必须是Exception或者Exception的子类。
    3. throws关键字可以跟多个异常类名,用逗号隔开。
    4. 方法内部用throw抛出的所有异常,都必须在定义方法时用throws声明异常(如果异常类存在子父类关系,则只需抛出父类即可)。
    5. throws关键字只是单纯的声明异常(当前方法存在的异常),留给其他调用此方法的方法处理异常,如果其他方法没有处理,将最终留给JVM中断处理。
    6. 如果调用了声明异常的方法,必须对声明的异常进行处理。方法有两种。① 继续使用throws关键字抛出,留给下一个调用此方法的方法。② 使用try,catch处理异常。

    测试代码:

    package com.lanyue.day20;
    
    public class ThrowAbleLearn throws ArithmeticException{
    
        public static void main(String[] args) {
    
            System.out.println(getData(1,0));
        }
    
        public static int getData(int divisor,int dividend){
    
            if(dividend == 0){
    
                throw new ArithmeticException("除数不能为零");
    
            }else{
    
                return divisor / dividend;
            }
        }
    }
    

    try......catch......finally

    try{

    }catch(XXXException e){

    }

    catch(XXXException e){

    }

    ......

    finally{

    //无论是否发生异常,这里的代码必将执行。

    }

    注意:

    1. catch语句可以有多个,用来抓取不同类型的异常。
    2. 如果try中出现了异常,就会执行catch块中的逻辑代码。
    3. 如果catch小括号内抓取的异常类型并不是try中发生异常类的父类或同类,则并不会引起catch大括号内容的执行
    4. 可以结合Throwable类中处理异常的三个方法进行处理异常。
    5. finally代码块是配合try一起使用的,finally块中的代码一定会执行(无论是否发生异常)。
    6. 面对多个可能发生异常的语句,既可以对每个语句都执行try...catch抓获,也可以只用一个try...catch抓获多个异常。
    7. 如果使用一个try...catch语句抓获多个异常事件。需要注意:如果catch抓取的异常类有子父类关系,则子类必须写在父类的上面。
    8. finally代码块中可以写return语句,且无论如何,finally所在的方法都会返回该return语句。所以如果没有十足的把握,尽量不要在finally代码块中写return语句。
    9. 如果父类方法抛出了异常,则子类重写父类方法时,需要抛出和父类相同的异常,或者是父类抛出异常类的子类,或者就不抛出异常。
    10. 如果父类方法没有抛出异常,则子类也不可抛出异常。如果确实产生了异常,只能使用try catch语句抓捕异常,不能声明抛出。

    自定义异常类:

    很多情况下,依靠Java自身定义的异常类是无法满足需求的。这个时候,我们就需要自定义异常类。

    定义格式:
     

    public XxxException extends Exception | RuntimeException{
        
        public XxxException(){...}
        public XxxException(){...}
    
    }

    注意事项:

    1. 异常类结尾最好是Exception,用以说明此类是异常类对象。
    2. 自定义异常类必须继承自Exception或者RuntimeException类。
    3. 自定义异常类内部必须实现空参和一个参数(字符串)的构造函数。
    4. 构造函数可以且建议使用父类方法执行(super()和super(String s))。

    代码测试:

    package com.lanyue.day21;
    
    public class MyException extends Exception {
    
        public MyException() {
            super();
        }
    
        public MyException(String message) {
            super(message);
        }
    }
    
    package com.lanyue.day21;
    
    public class Demo {
    
        public static void main(String[] args) {
    
            method(5,1);
        }
    
        public static void method(int a,int b){
    
            if(b == 1){
    
                try {
    
                    throw new MyException("除数为1没有实际的计算意义");
    
                } catch (MyException e) {
    
                    System.out.println("没有计算价值");
                }
            }
        }
    }
    
  • 相关阅读:
    Pytorch使用tensorboardX可视化。超详细!!!
    pytorch旧版安装
    Pytorch的网络结构可视化(tensorboardX)(详细)
    PyTorch代码调试利器: 自动print每行代码的Tensor信息
    权重衰减(weight decay)与学习率衰减(learning rate decay)
    pytorch的backward
    PyTorch入门学习(二):Autogard之自动求梯度
    Pytorch
    Python之线程、进程和协程
    Python之logging模块
  • 原文地址:https://www.cnblogs.com/viplanyue/p/12700527.html
Copyright © 2011-2022 走看看