异常体系
小结: 异常是程序在编译或者运行的过程中可能出现的错误!! 异常分为2类:编译时异常,运行时异常。 -- 编译时异常:继承了Exception,编译阶段就报错,必须处理,否则代码不通过。 -- 运行时异常:继承了RuntimeException,编译阶段不会报错,运行时才可能出现。 异常一旦真的出现,程序会终止,所以要研究异常,避免异常,处理异常,程序更健壮!!
编译异常处理的三种方式
方式一
在出现编译时异常的地方层层把异常抛出去给调用者,调用者最终抛出给JVM虚拟机。 JVM虚拟机输出异常信息,直接干掉程序,这种方式与默认方式是一样的。 虽然可以解决代码编译时的错误,但是一旦运行时真的出现异常,程序还是会立即死亡! 这种方式并不好! 小结: 方式一出现异常层层跑出给虚拟机,最终程序如果真的出现异常,程序还是立即死亡!这种方式不好!
public class Exception01{
public static void main(String[] args) throws Exception {
System.out.println("程序开始。。。。。");
parseTime("2011-11-11 11:11:11");
System.out.println("程序结束。。。。。");
}
public static void parseTime(String date) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
InputStream is = new FileInputStream("E:/meinv.jpg");
}
}
方式二
自己捕获异常和处理异常的格式:捕获处理 try{ // 监视可能出现异常的代码! }catch(异常类型1 变量){ // 处理异常 }catch(异常类型2 变量){ // 处理异常 }... 监视捕获处理异常企业级写法: try{ // 可能出现异常的代码! }catch (Exception e){ e.printStackTrace(); // 直接打印异常栈信息 } Exception可以捕获处理一切异常类型! 小结: 第二种方式,可以处理异常,并且出现异常后代码也不会死亡。 这种方案还是可以的。 但是从理论上来说,这种方式不是最好的,上层调用者不能直接知道底层的执行情况!
public class Exception02 {
public static void main(String[] args) {
System.out.println("程序开始。。。。");
parseTime("2011-11-11 11:11:11");
System.out.println("程序结束。。。。");
}
public static void parseTime(String date) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
InputStream is = new FileInputStream("E:/meinv.jpg");
} catch (Exception e) {
e.printStackTrace(); // 打印异常栈信息
}
}
}
方式三
在出现异常的地方把异常一层一层的抛出给最外层调用者, 最外层调用者集中捕获处理!!(规范做法) 小结: 编译时异常的处理方式三:底层出现的异常抛出给最外层调用者集中捕获处理。 这种方案最外层调用者可以知道底层执行的情况,同时程序在出现异常后也不会立即死亡,这是 理论上最好的方案。 虽然异常有三种处理方式,但是开发中只要能解决你的问题,每种方式都又可能用到!!
public class Exception03 {
public static void main(String[] args) {
System.out.println("程序开始。。。。");
try {
parseTime("2011-11-11 11:11:11");
System.out.println("功能操作成功~~~");
} catch (Exception e) {
e.printStackTrace();
System.out.println("功能操作失败~~~");
}
System.out.println("程序结束。。。。");
}
public static void parseTime(String date) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy、MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
InputStream is = new FileInputStream("D:/meinv.jpg");
}
}