异常
任何程序设计语言在运行时都可能出现错误,比如数组越界之类的。
捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生
对于这些错误,一般有两种解决方法
- 遇到错误就停止程序的运行
- 由程序员在编写程序时,就考虑到错误的检测,错误消息的提示,以及错误的处理
异常:在java语言中,程序执行中发生的不正常情况叫做“异常”
java中的异常常用于处理非预期的情况,比如文件没有找到,网络错误,非法的参数
错误主要分为两类:
error:JVM系统内部错误,资源耗尽等严重情况
exception:其他因编程错误而遇到的问题:
- 空指针访问
- 试图读取不存在的文件
- 网络连接中断
捕获异常
- java提供的是异常处理的抓抛模型
- java程序的执行过程中如果出现异常,会自动生成一个异常类对象,该异常对象将被提交给java运行时系统,这个过程称为抛出异常
- 如果要给方法内抛出异常,该异常将常会抛到调用方法中。如果异常没有再调用方法中处理,他会继续被抛给这个调用方法的调用者。这个过程会一直继续下去,直到异常被处理。这一过程称为捕获异常
- 如果一个异常回到main方法,并且main不处理,则程序运行停止
- 程序员通常只能处理exception错误,error无力
xxxxxxxxxx
int i = 0;
//将可能出现错误的代码块括起来
try {
System.out.println(3/i);
}catch(Exception e) { //当不知道捕获的是什么类型的异常时,可以直接使用所有异常的父类Exception
e.printStackTrace();//得到异常信息
//或者
System.out.println(e.getMessage());
} finally {
//它是捕获异常的体系中最终一定会会执行的部分。
}
System.out.println("ok");
在捕获异常的代码块中,如果前面的代码有异常,就不会执行后面的
- getMessage()方法可以得到相关异常事件的信息
- printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。
抛出异常 throw/throws
throw出现在方法体中 throws出现在方法头
xxxxxxxxxx
public static Test {
public static void main(String[] args) {
B b = new B();
try {
b.test();
}catch(Exception e) {
e.printStackTrace();
}
}
}
class B {
int i;
public void test() throws Exception { //throw抛出异常,在调用方法处捕获处理
B b = null;
System.out.println(b.i);
}
}
在当前函数抛出的异常,并不知道如何处理,就先将其抛出,由谁使用就由谁处理,如果使用者也不知道,那就继续抛出
如果父类中的方法抛出异常,子类中重写父类的方法也要抛出异常,重写方法不能抛出比父类范围更大的异常
自定义异常类
- 通过继承java.lang.Exception类声明自己的异常类
- 在方法适当的位置生成自定义异常的实例,并用throws语句抛出
- 在方法的声明部分用throws语句声明该方法可能抛出的异常
xxxxxxxxxx
class MyException extends Exception {
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getld() {
return idnumber;
}
}
Comments | NOTHING