异常
概念:什么是异常
异常就是程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行;如果异常没有被处理,程序将会非正常的终止
注意:开发过程中的语法错误和逻辑错误不是异常
异常是一种对象,通过类进行定义,其根类是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 类来创建的异常类是检查性异常类。
一个异常类和其它任何类一样,包含有变量和方法。
浙公网安备 33010602011771号