一.异常的概述
java异常是处理程序中错误的一种机制, 错误通常指的是程序在运行的过程中发生的一些异常事件, 比如0作为除数, 数组下标越界, 流读取的文件不存在。设计程序的时候应该在异常发生的时候能友好的处理一下这些异常, java中出现的异常事件都可以生成一个异常类的对象, 这个对象将异常发生的信息封装起来交给java虚拟机引擎去处理, 这个过程称为抛出(throw)异常,当java虚拟机接收到异常对象, 会寻找能处理这一异常的代码, 这个过程称为捕获(catch)异常。
JAVA中把每一种异常都封装成了一个类。
自定义异常类
public class MyException extends Exception{
public MyException() {
super();
}
}
实例化异常
MyException e = new MyException("关于异常的描述");
System.out.println(e.getMessage); // 打印"关于异常的描述"
二.异常的分类
Trowable类是所有异常的父类,该类的两个直接子类是Error(错误)类和Exception(异常)类。
1.Exception类:指可以捕获的异常。可分为两种:
RuntimeException:可能出现的异常,经常出现,可以处理,也可以不处理,即可不用catch;
非RuntimeException:一定出现的异常,必须catch;
2.Error类:系统错误,虚拟机错误。
三.异常的捕获与处理
1.try...catch 语句
try {
//需要正常执行的语句
}catch(Exception e){
//对异常进行处理的语句
e.printStackTrace();//打印输出这个错误的一串信息
}
2.try...catch...finally语句
try {
//需要正常执行的语句
}catch(Exception e){
//对异常进行处理的语句
}finally{
//一定会被处理的语句
}
在try中使用return也会执行finally语句,finally语句通常用于执行垃圾回收、释放资源等操作。
注意:子类异常的捕获语句不能写在父类捕获语句的下面。
四.声明异常
对于程序发生的异常,除了可以使用try...catch语句外,还可以使用throws声明或throw语句抛出异常。
1.throws 将某个方法的异常抛出,谁调用这个方法,谁去处理这个异常,当用在main方法时必须处理,否则就会把异常打印出来。
2.throw 通常情况下,程序发生错误时系统会自动抛出异常,而有时希望程序自行抛出异常,可以使用throw语句来实现。
例如打印3除以0的异常:
public class Test{
public static void main(String[] args) throws Exception {
int a = 3;
int b = 0;
chufa(a,b);
}
public static void chufa(int a,int b) throws Exception{
if(b == 0) {
throw new Exception("关于错误的描述");
}else {
System.out.println(a / b);
}
}
}
打印结果:
Exception in thread "main" java.lang.Exception: 关于错误的描述
at zuoye.Test.chufa(Test.java:17) //17代表问题代码所在的行;
at zuoye.Test.main(Test.java:12)
五.方法重写中的异常
子类重写父类方法时可不抛出父类方法异常,如果抛出异常,需要抛出同类型异常或子类异常。