目标:编译时异常的处理机制
引入:
编译时异常:编译阶段就会报错,一定需要程序员处理的,否则代码无法通过!!
抛出格式:
方法 throws 异常1 , 异常2 , …{
}
建议格式:可以抛出所有异常!
方法 throws Exception{
}
编译时异常的处理方式一:
在出现异常的方法那里,层层把异常抛出给调用者,最终抛给JVM虚拟机。这种方式跟默认的方式是一样的,一旦真的出现异常,程序还是会死亡!这种方式不是很好!!
public class ExceptionDemo01 {
public static void main(String[] args) throws Exception {
System.out.println("程序开始。。。");
parse();
System.out.println("程序结束。。。");
}
public static void parse() throws Exception {
String date = "2018-10-11 10:10:10";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
InputStream is = new FileInputStream("D:/meidleiffnv.jpg");
}
// public static void main(String[] args) throws ParseException, FileNotFoundException {
// System.out.println("程序开始。。。");
// parse();
// System.out.println("程序结束。。。");
// }
//
// public static void parse() throws ParseException , FileNotFoundException {
// String date = "2018-10-11 10:10:10";
// 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");
// }
}
编译时异常的处理方式二:
在出现异常的地方自己处理,谁出现谁处理。
自己捕获异常和处理异常的格式:捕获处理
try{
// 监视可能出现异常的代码!
}catch(异常类型1 变量){
// 处理异常
}catch(异常类型2 变量){
// 处理异常
}…
捕获处理异常企业级写法:
try{
// 可能出现异常的代码!
}catch (Exception e){
e.printStackTrace(); // 直接打印异常栈信息
}
可以捕获处理一切异常类型!
小结:
方法二:在出现异常的地方自己捕获处理异常,这种方式确实不会引起程序的死亡!
底层都自己解决问题,上层调用者不能直接知道底层执行的情况!从理论来看也不是最好的方案!
public class ExceptionDemo02 {
public static void main(String[] args) {
System.out.println("程序开始。。。");
parse();
System.out.println("程序结束。。。");
}
public static void parse() {
try{
String date = "2018-10-11 10:10:10";
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");
} catch (Exception e) {
e.printStackTrace();// 打印异常信息!
}
}
// public static void parse() {
// try{
// String date = "2018-10-11 10:10:10";
// 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");
// } catch (FileNotFoundException | ParseException e) {
// e.printStackTrace();// 打印异常信息!
// }
// }
// public static void parse() {
// try{
// String date = "2018-10-11 10:10:10";
// 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");
// } catch (FileNotFoundException e) {
// e.printStackTrace();// 打印异常信息!
// } catch (ParseException e) {
// e.printStackTrace();
// }
// }
}
编译时异常的处理方式三:
在出现异常的地方把异常一层一层的抛出给最外层调用者,
最外层调用集中捕获处理!!(规范做法)
小结:
底层把异常抛给最外层调用者,最外层集中捕获处理异常
这种方式最外层可以知道底层执行的情况,而且程序不会死亡,
这是理论上最好的异常处理方案!
public class ExceptionDemo03 {
public static void main(String[] args){
System.out.println("程序开始。。。。");
try {
parse();
System.out.println("功能成功完成了!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("功能操作失败了!!");
}
System.out.println("程序结束。。。。");
}
public static void parse() throws Exception {
String date = "2018-10-11 10:10:10";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(date);
System.out.println(d);
// InputStream is = new FileInputStream("D:/meiddddnv.jpg");
}
}