java中的异常

319 阅读3分钟

今天分享以下Java中的异常类,说的不好还请指正,感谢.

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.

1.异常的分类:

  • 检查时异常|编译时异常:编译期间出现的异常.其中最具代表的检查性异常是用户错误或问题引起的异常.如果不做处理,程序就无法继续向下执行.
  • 运行时异常:出现在程序运行期间,可以通过程序的健壮性处理.

2.Exception的层次

java.lang.Exception类是所有异常类的父类.

而Exception是Throwable类的子类.其中Throwable的子类还有一个Error.但Error一般有虚拟机生成并脱出,程序不关注.

Exception的主要子类:IOException类和RuntimeException类.

3.java内置异常

java定义了一些异常类在java.lang标准包中.

标准运行时异常类的子类是最常见的异常类.由于java.lang 包是默认加载到所有的java程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用.

  1. 下面列出一些java中的运行时异常:
  • ArithmeticException

    • 出现异常的运算条件时,抛出该异常.例如(1/0)
  • ArrayIndexOutOfBoundsException

    • 数组下标越界异常,数组下标为负或大小超出数组大小时抛出
  • ClassCastException

    • 类型转换异常
      试图把对象强制转换为不是实例的子类时,抛出该异常
  • NegativeArraySizeException

    • 试图创建大小为负的数组时抛出该异常
  • NullPointerException

    • 空指针异常 当引用指向为空时抛出该异常
  • NumberFormatException

    • 试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常
  1. 下面列出一些java中的检查时异常:
  • ClassNotFoundException
    • 应用程序试图加载类时,找不到相应的类,抛出该异常
  • InstantiationException
    • 当试图使用 Class类中的newInstance方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常

4.异常处理

a.关键字

  • throw:制造异常
  • throws:抛出异常,一个方法可以抛出多个异常,多个异常之间使用逗号隔开
  • try...catch:捕获异常
    • try...catch使用:

        try {
        可能会出现异常的代码;
        } catch (FileNotFoundException e){
            如果出现这个异常会执行的代码;
            //打印异常的栈信息,标红色的   //打印异常信息
            e.printStackTrace();
        } catch (NullPointerException e){
            如果出现这个异常会执行的代码;
        }.....
            finally{
            无论是否出现异常,都会执行finally中的代码
        }
      

try,catch,finally 块之间不能添加任何代码

一旦try中出现异常了,try后面的代码就都不会执行

一个try后面可以跟一个过着多个catch

若果有多个catch,那么大范围的异常需要排在后面

5.声明自定义异常

在java中可以自定义需要的异常.但应注意以下几点:

  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承Exception 类,只继承Exception类创建的异常类是检查时异常
  • 如果你想写一个运行时异常类,那么需要继承RuntimeException 类

示例:

class NameNullException extends RuntimeException