异常处理
异常概述和异常体系结构
- 在java语言中,将程序执行中发生的不正常的情况称为异常。
可以分成两类
- Error Java虚拟机无法解决的严重问题。如jvm内部错误、资源耗尽 如栈溢出 stackOverflowError 和堆溢出OutOfMemoreError。一般不编写针对性的代码进行处理。
- Exception 其他因为变成编程错误或偶然的外在因素导致的一般性问题。可以使用针对性的代码进行处理。
- 空指针异常
- 试图读取不存在的文件
- 网络连接中断
- 数组下标越界
常见异常 (Exception)
编译时异常 (checked)
- IOException
- classNotFoundException
运行时异常(unchecked)—RuntimeException
- NullPointerException
- ArrarIndexOutofBoundsException
- classCassException
- NumberFormatException
- InputMismatchException
- ArithmeicException
异常处理机制一:try-catch-finallf
常用方法:
- e.getMessage(); 错误信息字符串
- printStackTrace(); 控制台打印
- e.toString(); 获得异常种类和错误信息
throws
在重写时子类抛出的异常必须时父类抛出异常的子类。
- 父类方法没有throws,子类重写的方法也不能throws
手动抛出异常
throw new Exception(“”);
用户自定义异常类
继承异常类,序列化等要求
- 运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。 - 非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。