异常

概念:什么是异常

  异常就是程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行;如果异常没有被处理,程序将会非正常的终止

  注意:开发过程中的语法错误和逻辑错误不是异常

  异常是一种对象,通过类进行定义,其根类是java.lang.Throwable

异常发生的原因有很多,通常包含以下几大类:

  • 用户输入了非法数据。

  • 要打开的文件不存在。

  • 网络通信时连接中断,或者 JVM 内存溢出。

这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。

异常的分类

1、错误(Error):是JVM抛出的,代表系统内部错误,无法解决。如:StackOverflowError(栈溢出)、LinkageError()、VirtualMachineError()等等

2、Exception:

①检查性异常:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。又分成编译时异常,如:

IOException\ClassNotSupportedException\CloneNotSupportedException等等

②运行时异常:runtimeexception(非检查异常), 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。如:

ArithmeticException、InputMismatchException、ClassCastException、NullpointException等等

异常方法

异常处理机制

  异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。

处理方式:

①使用try...catch...finally语句块捕获异常并处理

②在函数签名中使用throws 声明交给函数调用者去解决

③在方法内部通过throw抛出异常对象

注意:throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。

throws出现在方法函数头,表示在抛出异常,由该方法的调用者来处理。

 

编译时期异常和运行时期异常的区别

编译时期异常:在编写程序时发生的,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

运行时期异常:一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生,是不检查异常,程序中可以选择捕获处理,也可以不处理。

 

finally关键字的特点

无论是否发生异常,都无条件执行的语句

 

注意事项:

  • catch 不能独立于 try 存在。

  • 在 try/catch 后面添加 finally 块并非强制性要求的。

  • try 代码后不能既没 catch 块也没 finally 块。

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

 

 自定义异常

在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。

  • 所有异常都必须是 Throwable 的子类。

  • 如果希望写一个检查性异常类,则需要继承 Exception 类。

  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。

可以像下面这样定义自己的异常类:

class MyException extends Exception{
}

只继承 Exception 类来创建的异常类是检查性异常类。

一个异常类和其它任何类一样,包含有变量和方法。

 

 

posted on 2023-12-07 16:34  L0ngyc  阅读(45)  评论(0)    收藏  举报