JAVA异常

 当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,环境,网络不可用...)时,Java就会用异常对象来描述。Java中用2种方法处理异常:

  Ⅰ.在发生异常的地方直接处理;

  Ⅱ.将异常抛给调用者,让调用者处理

 

异常分类

  Ⅰ.检查性异常:java.lang.Exception

  Ⅱ.运行期异常:java.lang.RuntimeException

  Ⅲ.错误:java.lang.Error

 

异常处理

1 //try...catch语句
2 try{
3    //语句块 
4 }catch{
5     //语句块 
6 }

程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。如果catch有多个的话,会捕捉到相对应的问题选择相对应的catch

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月05日
 4  * 内容:异常检查
 5  */
 6 
 7 package com.beekc.www;
 8 import java.io.*;
 9 
10 public class Beekc {
11     public static void main(String[] args) {
12 
13         //异常检查:打开文件
14         try{
15             //不知道在D盘有没有aa文件,防止程序异常,把它抛出异常
16             FileReader fr = new FileReader("d:\\aa.text");
17         }catch(Exception e){
18             //提示出什么问题
19             e.printStackTrace();
20         }
21    System.out.println("OK") //上面异常被捕捉,下面这语句不会被执行
22     }
23 }

 

如果把finally块置try...catch...语句后,finally块一般都会得到执行,它相当于一个万能得保险,即使前面得try块发生异常,而又没有对应异常catch块,finally块将马上执行。

以下情形,finally块不会被执行:

  Ⅰ.finally块中发生了异常;

  Ⅱ.程序所在线程死亡;

  Ⅲ.在前面的代码中用了System.exit();

  Ⅳ.关闭CPU;

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月05日
 4  * 内容:finally的必要性
 5  */
 6 
 7 package com.beekc.www;
 8 import java.io.*;
 9 
10 public class Beekc {
11     public static void main(String[] args) {
12 
13         FileReader fr =null;
14         //异常检查:打开文件
15         try{
16             //比如我们这里的aa文件存在
17             fr = new FileReader("d:\\aa.text");
18         }catch(Exception e){
19             //提示出什么问题
20             e.printStackTrace();
21         }finally{
22             //这个语句块,不管有没有异常,都会被执行
23             //一般说,把需要关闭的资源[文件,连接,内存...]
24             if(fr!= null)
25             {
26                 try{
27                     //关闭文件,打开文件之后一定要把文件关闭了,避免出现的资源问题
28                     fr.close();
29                 }catch(IOException e){
30                     e.printStackTrace();
31                 }
32 
33             }
34         }
35 
36     }
37 }

 

用throws,将异常抛给调用者,让调用者处理异常。下面是给小实例

 1 /*
 2  * 作者:白客C
 3  * 时间:2020年03月05日
 4  * 内容:用throws把异常抛给调用者
 5  */
 6 
 7 package com.beekc.www;
 8 import java.io.FileReader;
 9 
10 public class Beekc {
11     public static void main(String[] args) {
12         //使用try解决异常,也可以抛出去交给虚拟机去处理,但不建议这么做
13         try{
14             Father father = new Father();
15             father.fatherMove();
16         }catch(Exception e){
17             e.printStackTrace();
18         }
19        
20     }
21 }
22 
23 //父亲类
24 class Father{
25     
26     public Son son = null;
27     
28     public Father()
29     {
30         son =new Son();
31     }
32     
33     //这里使用了throws
34     public void fatherMove() throws Exception{
35         //Fahther类调用了Son类抛出异常的方法,如果不想解决这个方法也可以抛出去
36         son.sonMove();
37     }
38     
39 }
40 
41 //儿子类
42 class Son{
43     //使用throws抛出给调用者去解决
44     public void sonMove() throws Exception{
45         FileReader fr = null;
46         fr = new FileReader("d:\\aa.text");
47     }
48 }

 

JAVA异常

上一篇:Java的IO流


下一篇:FileReader基础