异常总结

  • 异常

在这里插入图片描述

异常的类型

Exception 异常层次结构的根类

ArithmeticException 算数错误

ArrayIndexOutOfBoundsException 数组越界

NullPointerException 访问空值

ClassNotFoundException 没有加载所需的类

InputMismatchException 输入的数据类不匹配

IllegalArgumentException 方法接收到非法参数

异常定义

(1)不是编译错误;
(2)程序在运行时发生的不正常现象。

异常的坏处

(1)信息不友好;非专业的用户不容易理解。
(2)中断正在运行的程序。

常见的异常

(1) ArrayIndexOutOfBoundsException:数组越界异常。
(2) NullPointerException:空指针异常。
(3) ClassCastException:类型转换异常。

异常处理机制

try…catch的方式处理异常

try(检测异常)…catch(捕获异常)…finally(释放资源)

有三种搭配方式

 try catch

try catch finally

try finally 

执行过程:

  • (1)依次从上往下匹配类型,执行匹配到的第一条;执行完毕跳出try…catch结构,执行后续语句。
  • (2)多条catch语句时,子类放前面,父类放后面。
    (3)finally:总会执行。通常程序收尾的语句。
    (1)有没有异常都会执行。
    (2)有异常,无论捕捉到与否都会执行。

throws和throw的区别

throws

用在方法声明后面,跟的是异常类名。可以跟多个异常类名,用逗号隔开,表示抛出异常,由该方法的调用者来处理。

throw

用在方法体内,跟的是异常对象名,只能抛出一个异常对象名,表示抛出异常,由方法体内的语句处理。

JVM默认是如何处理异常的

如果我们没有写针对的处理方式,就只有交给调用 main 的 jvm 来处理,jvm 有一个默认的异常处理机制,将该异常进行处理.并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上,同时程序停止运行。

finally关键字的特点及作用

finally 的特点

被finally控制的语句体一定会执行

特殊情况:

在执行到finally之前jvm退出了(比如System.exit(0))

自定义异常

除了系统给定的异常,我们还可以自己定义异常可以通过名字区分到底是什么异常,有针对的解决办法

自定义异常需要继承异常的基类

(继承 Exception 或者 RuntimeException)

异常的注意事项及如何使用异常处理

异常注意事项

a:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。

b:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常

c:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

如何使用异常处理

原则:

如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws

区别:

后续程序需要继续运行就try

后续程序不需要继续运行就throws

最后

如果JDK没有提供对应的异常,需要我们来自定义异常。

展开阅读全文

没有更多推荐了,返回首页