21.异常处理

  1. 21.异常处理
    1. 21.1 知识点
      1. Java中的异常捕获和C#中使用基本一致
      2. Java中的常见异常类
      3. Java中自定义异常
      4. 方法中抛出异常
      5. 总结
    2. 21.2 知识点代码

21.异常处理


21.1 知识点

Java中的异常捕获和C#中使用基本一致

语法:

try
{
    // 需要进行异常捕获的代码块
}
catch (NullPointerException ex)
{
    // ex.getMessage()
    // 捕获异常信息
}
catch (ArrayIndexOutOfBoundsException ex)
{
    // ex.getMessage()
    // 捕获异常信息
}
catch (Exception ex)
{
    // ex.getMessage()
    // 捕获异常信息
}
finally
{
    // 不管之前的代码块是否发生异常
    // finally中的内容都将执行
    // 注意:以下几种情况下finally中内容不会执行
    // 1. finally 语句块中发生异常
    // 2. 在finally之前执行了 System.exit() 退出程序
    // 3. 程序所在的线程销毁
    // 4. 关闭 CPU
}

Java中的常见异常类

  • NullPointerException: 空指针异常
  • IOException: 输入输出异常
  • FileNotFoundException: 文件未找到异常
  • ArrayIndexOutOfBoundsException: 数组越界异常
  • NegativeArraySizeException: 数组元素个数为负数抛出异常
  • ClassCastException: 类型转换异常
  • ArithmeticException: 算数异常
  • ArrayStoreException: 数组包含不兼容的值抛出的异常
  • ClassNotFoundException: 未找到相应类异常
  • 等等

Java中自定义异常

继承 Exception 异常基类
实现一个有参构造函数
通过 throw 关键字自己抛出异常对象

public class Lesson21_MyException extends Exception {
    
    public int i = 0;
    
    public Lesson21_MyException(String str) {
        super(str);
    }
}
try {
    int i = -3;
    if (i < 0) {
        Lesson21_MyException ex = new Lesson21_MyException("数组容量不合法");
        ex.i = i;
        throw ex;
    }
    int[] ints = new int[i];
} catch (Lesson21_MyException ex) {
    System.out.println(ex.getMessage() + ";数组容量为:" + ex.i);
} finally {
    System.out.println("异常捕获结束");
}

方法中抛出异常

如果某个方法可能发生异常,但是又不想再方法内处理这个异常
想在调用这个方法的外部进行处理
可以使用 throws 关键字在声明方法时抛出可能的异常
多个异常可以使用逗号分割
那么外部调用该方法时,发生对应异常时即可进行处理
注意:
继承时,覆盖有抛异常的方法时,该方法必须抛出相同的异常或者异常的子类
如果父类中方法抛出多个异常,那么子类的覆盖方法必须抛出那些异常的子集,不能抛出新异常

public static void Test() throws ArrayIndexOutOfBoundsException, NegativeArraySizeException {
    int[] ints = new int[-3];
}
try {
    Test();
} catch (NegativeArraySizeException ex) {
    System.out.println("容量为负了");
} catch (ArrayIndexOutOfBoundsException ex) {
    System.out.println("索引越界");
}

总结

Java中的异常捕获和C#中基本一致,需要时直接使用即可。


21.2 知识点代码

public class Lesson21_异常处理
{
    public static void Test() throws ArrayIndexOutOfBoundsException, NegativeArraySizeException
    {
        int[] ints = new int[-3];
    }

    public static void main(String[] args)
    {
        //知识点1:Java中的异常捕获和C#中使用基本一致
        //语法:
        try
        {
            //需要进行异常捕获的代码块
        }
        catch (NullPointerException ex)
        {
            //ex.getMessage()
            //捕获异常信息
        }
        catch (ArrayIndexOutOfBoundsException ex)
        {
            //ex.getMessage()
            //捕获异常信息
        }
        catch (Exception ex)
        {
            //ex.getMessage()
            //捕获异常信息
        }
        finally
        {
            //不管之前的代码块是否发生异常
            //finally中的内容都将执行
            //注意:以下几种情况下finally中内容不会执行
            //1.finally 语句块中发生异常
            //2.在finally之前执行了System.exit()退出程序
            //3.程序所在的线程销毁
            //4.关闭CPU
        }




        //知识点2:Java中的常见异常类
        //NullPointerException:空指针异常
        //IOException:输入输出异常
        //FileNotFoundException:文件为找到异常
        //ArrayIndexOutOfBoundsException:数组越界异常
        //NegativeArraySizeException:数组元素个数为负数抛出异常
        //ClassCastException:类型转化异常
        //ArithmeticException:算数异常
        //ArrayStoreException:数组包含不兼容的值抛出的异常
        //ClassNotFoundException:未找到相应类异常
        //等等




        //知识点3:Java中自定义异常
        //继承Exception异常基类
        //实现一个有参构造函数
        //通过throw关键字自己抛出异常对象
        try
        {
            int i = -3;
            if (i < 0)
            {
                Lesson21_MyException ex = new Lesson21_MyException("数组容量不合法");
                ex.i = i;
                throw ex;
            }
            int[] ints = new int[i];
        }
        catch (Lesson21_MyException ex)
        {
            System.out.println(ex.getMessage() + ";数组容量为:" + ex.i);
        }
        finally
        {
            System.out.println("异常捕获结束");
        }




        //知识点4:方法中抛出异常
        //如果某个方法可能发生异常,但是又不想再方法内处理这个异常
        //想在调用这个方法的外部进行处理
        //可以使用throws关键字在声明方法时抛出可能的异常
        //多个异常可以使用逗号分割
        //那么外部调用该方法时,发生对应异常时即可进行处理
        //注意:
        //继承时,覆盖有抛异常的方法时,该方法必须抛出相同的异常或者异常的子类
        //如果父类中方法抛出多个异常,那么子类的覆盖方法必须抛出那些异常的子集,不能抛出新异常
        try
        {
            Test();
        }
        catch (NegativeArraySizeException ex)
        {
            System.out.println("容量为负了");
        }
        catch (ArrayIndexOutOfBoundsException ex)
        {
            System.out.println("索引越界");
        }


        //总结
        //Java中的异常捕获和C#中基本一致
        //需要时直接使用即可
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏