java语言中,在程序执行中发生的不正常情况叫做异常(开发的语法错误和逻辑错误不是异常);
异常分为两类:Error和Exception;
Error:Java虚拟机无法解决的严重问题,如JVM系统内部错误,资源耗尽等严重错误,一般不编写
针对性的代码进行处理;
Exception:其他因为编程错误或偶然的外在因素导致的一般性问题,可以使用针对性代码进行处理,
如:空指针访问,试图访问不存在的文件,网络中断等等。
分为编译时异常和运行时异常(Runtime Exception)。
常见的运行时异常: 数组下标越界(ArrayIndexOutOfBoundsException),算术异常(ArithmeticException)
类型转换异常(ClassCastException),空指针异常(NullPointerException)
当程序执行时,如果出现异常,那异常之后的代码就不再执行了。
如何处理Exception异常:
Java提供抓抛模型:
抛------ 1. 当程序出现异常,就会在异常代码处生成一个对应的异常类型的对象,并将此对象抛出,一旦抛出此异常的对象,
那么程序就会终止执行,此异常类的对象会被抛给方法的调用者。如果希望某些语句有无异常都执行,
那么就要放到finally中。不论try,catch中是否有return 语句,是否有异常,finally中语句都会执行。
2. 自动抛出与手动抛出(throw+ 异常类对象)
3. 手动抛出的异常类对象,可以是现成的异常类对象,也可以是自定义的异常类对象。
4. 自定义异常类继承Exception 或者其子类的异常类型,提供一个序列号,提供几个重载的构造器
public static void main(String[] args)throws FileNotFoundException,IOException{
try {
int i = 10;
throw new MyException("抛出");
}catch(MyException e){
e.printStackTrace();
}
}
class MyException extends Exception{static final long serialVersionUID = -123456; //每个异常类的序列号
public MyException(){
}
public MyException(String msg){
super(msg);
}
}
抓------抓住上一步抛出的异常类的对象,即为异常处理的方式。
异常处理方式一: try-catch
try{
//可能抛出异常的代码
}catch(Exception1 e){
//异常处理程序
}catch(Exception2 e){
//异常处理程序
}finally{
//有无异常都执行,finally是可选的
}
1. 不论try,catch中是否有return 语句,是否有异常,finally中语句都会执行。
2. try-catch 是可以相互嵌套的,finally是可选的, catch从上往下执行有匹配的异常类型句执行
3. e.getMessage(), e.printStackTrace()
异常处理方式二:在方法声明处抛出异常,即出现异常的方法显示地声明抛出某种异常,表示该方法不对该异常
进行处理,将由调用者处理。
public static void main(String[] args) throws FileNotFoundException,IOException{
method2();
}
static void method2() throws FileNotFoundException,IOException{
FileInputStream fis = new FileInputStream(new File("hello.txt"));int b;
while(( b= fis.read()) != -1){
System.out.print((char)b);
}
fis.close();
}