异常:
try...catch
异常分为编译(受检)异常 和 运行时异常
当try块中没有异常时,try块运行完之后,跳过catch块,直接执行后面的代码
当try块中有异常时,运行到异常语句,直接跳到catch中,运行完catch中语句之后,直接执行后面的代码,try块中异常后面的语句不会执行.
如果try块中有多个不同类型的异常需要捕获时
1.直接捕获异常父类Exception
2.多个异常依次捕获,多个catch块
多次异常依次捕获,需要注意顺序问题,父类异常放在最后
多次异常依次捕获,只会进入其中的一个catch块
3.try catch都是单独的语句块,需要注意局部变量问题.
try...catch...finally
finally最后必定执行的语句块.
注意:如果在一个方法内,try有个return语句,执行到return时,会用一个空间保存return放回值,然后运行finally块;如果finally块中有return语句,就改变空间保存的放回值,否则不会改变,致使有改变放回值的语句.
public class Test {
public FileInputStream file;
public void exception(String file) throws FileNotFoundException,IOException{
this.file= new FileInputStream(file);
this.file.reset();
}
}
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TestException {
public static void main(String[] args) {
Test t = new Test();
try {
t.exception("D:\\Java\\Test1.java");
} catch (FileNotFoundException e) {
//捕获异常
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在方法后面异常可以调用者必须加上try...catch,也可以在方法里增加try...catch
public class Test {
public FileInputStream file;
public void exception(String file) throws FileNotFoundException,IOException{
try {
this.file= new FileInputStream(file);
this.file.reset();
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
throw e;
}
}
}