异常处理的常见手段

try catch

1.将有可能存在异常的代码放在放在try中

2.如果try中的代码没有异常,则继续执行代码,不会执行catch中的语句

3.如果try中的代码有异常,则try中的代码就会立刻终止,执行catch中的代码

4.e.printStrackTrace();会打印出方法调用的痕迹,这样便于定位和分析哪里出现了异常

下面的代码演示有可能抛出FileNotFoundException异常的处理

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4  
 5 public class TestException {
 6  
 7     public static void main(String[] args) {
 8          
 9         File f= new File("d:/LOL.exe");
10          
11         try{
12             System.out.println("试图打开 d:/LOL.exe");
13             new FileInputStream(f);
14             System.out.println("成功打开");
15         }
16         catch(FileNotFoundException e){
17             System.out.println("d:/LOL.exe不存在");
18             e.printStackTrace();
19         }
20          
21     }
22 }

使用异常的父类进行catch

FileNotFoundException是Exception的子类,使用Exception也可以catch住FileNotFoundException

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4   
 5 public class TestException {
 6   
 7     public static void main(String[] args) {
 8           
 9         File f= new File("d:/LOL.exe");
10           
11         try{
12             System.out.println("试图打开 d:/LOL.exe");
13             new FileInputStream(f);
14             System.out.println("成功打开");
15         }
16          
17         catch(Exception e){
18             System.out.println("d:/LOL.exe不存在");
19             e.printStackTrace();
20         }
21           
22     }
23 }

多异常捕捉方法

有时候代码会抛出多个异常,比如:

1 new FileInputStream(f);
2 Date d = sdf.parse("2016-06-03");

这段代码,会抛出 文件不存在异常 FileNotFoundException 和 解析异常ParseException。解决办法之一是分别进行catch

1 catch (FileNotFoundException e) {
2     System.out.println("d:/LOL.exe不存在");
3     e.printStackTrace();
4 } catch (ParseException e) {
5     System.out.println("日期格式解析错误");
6     e.printStackTrace();
7 }

代码如下:

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.text.ParseException;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Date;
 7  
 8 public class TestException {
 9  
10     public static void main(String[] args) {
11  
12         File f = new File("d:/LOL.exe");
13  
14         try {
15             System.out.println("试图打开 d:/LOL.exe");
16             new FileInputStream(f);
17             System.out.println("成功打开");
18             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
19             Date d = sdf.parse("2016-06-03");
20         } catch (FileNotFoundException e) {
21             System.out.println("d:/LOL.exe不存在");
22             e.printStackTrace();
23         } catch (ParseException e) {
24             System.out.println("日期格式解析错误");
25             e.printStackTrace();
26         }
27     }
28 }

finally

无论是否出现异常,finally中的代码都会执行

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4  
 5 public class TestException {
 6  
 7     public static void main(String[] args) {
 8          
 9         File f= new File("d:/LOL.exe");
10          
11         try{
12             System.out.println("试图打开 d:/LOL.exe");
13             new FileInputStream(f);
14             System.out.println("成功打开");
15         }
16         catch(FileNotFoundException e){
17             System.out.println("d:/LOL.exe不存在");
18             e.printStackTrace();
19         }
20         finally{
21             System.out.println("无论文件是否存在, 都会执行的代码");
22         }
23     }
24 }

throws

考虑如下情况:
  主方法调用method1
  method1调用method2
  method2中打开文件

  method2中需要进行异常处理
  但是method2不打算处理,而是把这个异常通过throws抛出去
  那么method1就会接到该异常。 处理办法也是两种,要么是try catch处理掉,要么也是抛出去。
  method1选择本地try catch住 一旦try catch住了,就相当于把这个异常消化掉了,主方法在调用method1的时候,就不需要进行异常处理了

 代码如下:

 1 import java.io.File;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4  
 5 public class TestException {
 6  
 7     public static void main(String[] args) {
 8         method1();
 9  
10     }
11  
12     private static void method1() {
13         try {
14             method2();
15         } catch (FileNotFoundException e) {
16             // TODO Auto-generated catch block
17             e.printStackTrace();
18         }
19  
20     }
21  
22     private static void method2() throws FileNotFoundException {
23  
24         File f = new File("d:/LOL.exe");
25  
26         System.out.println("试图打开 d:/LOL.exe");
27         new FileInputStream(f);
28         System.out.println("成功打开");
29  
30     }
31 }

throw和throws的区别

1. throws 出现在方法声明上,而throw通常都出现在方法体内。
2. throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某个异常对象

posted @ 2020-02-02 15:38  东功  阅读(227)  评论(0编辑  收藏  举报