异常机制:
异常基本通过以下两种方式来处理:
1. try-catch-finally(一般采用本方式,捕获异常,自己处理)
try {
InputStream iso=new FileInputStream(new File(" "));
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}finally{
System.out.println(“我最终也执行了”);
}
2. throws(不负责任的做法,将异常直接抛出,让别人处理)
public static void NoFile() throws FileNotFoundException{
InputStream iso=new FileInputStream(new File(" "));
}
throw 异常中断(直接中断程序,后面代码不执行)
public void setAge(int age) throws AgeEception {
if (age>=0&&age<150) {
this.age = age;
}
System.out.println("异常之前:"+age);
throw new AgeEception("年龄赋值有误!!!");
// System.out.println("异常之后:"+age); throw抛出异常后 直接中断程序
}
1、不要试图通过try-catch 控制你的业务逻辑
因为异常会降低代码的可读性和性能,例如一些 null 的判断逻辑、除0的控制等等。
2、异常我们是不希望发生的
jdk 1.7 中对于try的增强
jdk1.7之前
InputStream is = null;
try {
is = new FileInputStream(new File(""));
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(is!=null){
is.close();
}
} catch (IOException e) {
try {
is.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
jdk1.7之后
所有需要关闭的流操作都可以放在try后面的()中, 语句用 ; 分隔
try(InputStream iss =new FileInputStream(new File(""));
Scanner input = new Scanner(System.in)){
}catch(ArithmeticException | IOException e){
e.printStackTrace();
}
异常体系结构图:
getMessage()的调用过程: