异常
异常是程序中的错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的
1.异常的分类
检查时异常|编译时异常:编译期间出现的异常.其中最具代表的检查性异常是用户错误或者问题引起的异常.如果不做处理,程序就无法继续向下执行
运行时异常:出现在程序运行期间,可以通过程序的健壮性处理
2.Exception的层次
java.lang.Exception类是所有异常类的父类
而Exception是Throwable类的子类,其中Throwable的子类还有一个Error,但Error一般有虚拟机生成并脱出,程序不关注
3.java中的异常
java定义了一些异常类在java.lang标准包中.
标准运行时异常类的子类是最常见的异常类.由于java.lang包是默认加载到所有java程序中
下面列出一些java中的运行时异常
- ArithmeticException
出现异常的运算条件时,抛出该异常.例如(1/0)
- ArrayIndexOutOfBoundsException
数组下标越界异常,数组下标为负或者大小超出数组大小是抛出
- ClassCastException
类型转换问题
试图把对象强制转换为不是实例的子类时,抛出该异常
- NegativeArraySizeException
试图创建大小为负的数组是抛出该异常
- NullPointerException
空指针异常 当引用指向为空时抛出该异常
- NumberFormatException
试图将字符串转换成一种数值类型,但是该字符串不能转换为适当格式时,抛出该异常
下面列出一些java中检查时异常
- ClassNotFoundException
应用程序试图加载类时,找不到相应的类,抛出异常
- InstantiationException
当试图使用Class类中的newInstance方法创建一个类的实例,而指定的类对象因为是一个接口或者是一个抽象类而无法实例化时,抛出这个异常
4.异常处理
a.关键字
throw:制造异常
throws:抛出异常,一个方法可以抛出多个异常,多个异常之间之间使用逗号分开
try...catch:捕获异常
try...catch使用:
try{
可能会出现异常的代码
}catch(FileNotFoundException e){
如果出现这个异常会执行的代码;
//打印异常的栈信息,标红色的 //打印异常信息
e.printStackTrace();
}catch(NullPointerExcepti e){
如果出现这个异常会执行的代码;
}....
finally{
无论是否出现异常,都会执行finally中的代码
}
try ,catch,finally块之间不能添加任何代码
一旦try中出现异常了,try后面的代码就都不会执行
一个try后面可以跟一个或者多个catch
如果有多个catch,那么大范围的异常需要排在后面
5.声明自定义异常
在java中可以自定义需要的异常.但需要注意以下几点
- 所有异常都必须是Throwable的子类
- 如果希望写一个检查性异常,则需要继承Exception类,只继承Exeption类创建的异常类是检查时异常
- 如果你想写一个运行时异常类,那么需要继承RuntimeException类
例子
class NameNullException extends RuntimeException