有些异常是可以预测到的,需要处理这些预见到的异常,如果有异常发生,而不处理异常,就会导致程序中断,下面的其他代码也不能正常执行。所以可以通过异常处理机制来防止程序的中断。
常见异常
RuntimeException :
错误的类型转换
数组下标越界
空指针访问
IOExeption :
从一个不存在的文件中读取数据
越过文件结尾继续读取EOFException
连接一个不存在的URL异常处理机制
Java异常处理:Java采用异常处理机制,将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁,并易于维护。
Java提供的是异常处理的抓抛模型。
- Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
- 如果一个方法内抛出异常,该异常会被抛到调用方法中。如果异常没有在调用方法中处理,它继续被抛给这个调用方法的调用者。这个过程将一直继续下去,直到异常被处理。这一过程称为捕获(catch)异常。
- 如果一个异常回到main()方法,并且main()也不处理,则程序运行终止。
程序员通常只能处理Exception,而对Error无能为力。
- 捕获异常(catch)
异常处理是通过try-catch-finally语句实现的。
try
{
...... //可能产生异常的代码
}
catch( ExceptionName1 e )
{
...... //当产生ExceptionName1型异常时的处置措施
}
catch( ExceptionName2 e )
{
...... //当产生ExceptionName2型异常时的处置措施
}
[ finally{
...... //无条件执行的语句
} ] - 抛出异常(throws)
- 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理(捕获处理)。
- 在方法声明中用 throws 子句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
子类重写父类的方法时,子类不可以抛出范围更大的异常。
- 人工抛出异常
- 首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。
IOException e =new IOException();
throw e; - 可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:
throw new String("want to throw");
- 创建用户自定义异常类
class MyException extends Exception {
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}
public class Test01{
public void regist(int num) throws MyException {
if (num < 0)
throw new MyException(“人数为负值,不合理”,3);
else
System.out.println("登记人数" + num );
}
public void manager() {
try {
regist(100);
} catch (MyException e) {
System.out.print("登记失败,出错种类"+e.getId());
}
System.out.print("本次登记操作结束");
}
public static void main(String args[]){
Test8_6 t = new Test8_6();
t.manager();
}
}