16.3. 捕获异常

16.3.1. try-catch语句

语法:

try{

//可能会发生异常的语句

} catch(Throwable e){

//处理异常e
}

Helloword2.java

package com.a51work.cn;

import javafx.scene.input.DataFormat;


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Helloworld2 {
    public static void main(String[] args) {
        Date date = readDate();
        System.out.println("日期 = "+ date);

    }

    public static Date readDate() {
        try {
            String str = "2A19-10-13";
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//            从字符串中解析日期
            Date date = df.parse(str);
            return date;
        } catch (ParseException e) {
            System.out.println("处理ParseException...........");
            e.printStackTrace();
        }
        return null;
    }
}


/*
处理ParseException...........
java.text.ParseException: Unparseable date: "2A19-10-13"
 at java.text.DateFormat.parse(DateFormat.java:366)
 at com.a51work.cn.Helloworld2.readDate(Helloworld2.java:23)
 at com.a51work.cn.Helloworld2.main(Helloworld2.java:13)
日期 = null
* */

16.3.2. 多catch代码块

多catch代码块语法如下:

try{

//可能会发生异常的语句

}
catch(Throwable e){
//处理异常e

} catch(Throwable e){
//处理异常e

} catch(Throwable e){
//处理异常e
}

HelloWorld2.java

package com.a51cto;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloWorld2 {
 public static void main(String[] args) {
  Date date = readDate();
  System.out.println("读取的日期 = " + date);
 }

 public static Date readDate() {
  FileInputStream readfile = null;
  InputStreamReader ir = null;
  BufferedReader in = null;
  try {
   readfile = new FileInputStream("readme.txt");
   ir = new InputStreamReader(readfile);
   in = new BufferedReader(ir);
   // 读取文件中的一行数据
   String str = in.readLine();
   if (str == null) {
    return null;
   }
   DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
   Date date = df.parse(str);
   return date;

  } catch (FileNotFoundException e) {
   System.out.println("处理FileNotFoundException...");
   e.printStackTrace();

  } catch (IOException e) {
   System.out.println("处理IOException...");
   e.printStackTrace();

  } catch (ParseException e) {
   System.out.println("处理ParseException...");
   e.printStackTrace();
  }
  return null;
 }
}

/*
处理FileNotFoundException...
java.io.FileNotFoundException: readme.txt (系统找不到指定的文件。)
 at java.io.FileInputStream.open0(Native Method)
 at java.io.FileInputStream.open(Unknown Source)
 at java.io.FileInputStream.<init>(Unknown Source)
 at java.io.FileInputStream.<init>(Unknown Source)
 at com.a51cto.HelloWorld2.readDate(HelloWorld2.java:24)
 at com.a51cto.HelloWorld2.main(HelloWorld2.java:15)
读取的日期 = null

*/

16.3.3. try-catch语句嵌套

HelloWorld2.java

package com.a51cto;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloWorld2 {
 public static void main(String[] args) {
  Date date = readDate();
  System.out.println("读取的日期 = " + date);
 }

 public static Date readDate() {
  FileInputStream readfile = null;
  InputStreamReader ir = null;
  BufferedReader in = null;
  try {
   readfile = new FileInputStream("readme.txt");
   ir = new InputStreamReader(readfile);
   in = new BufferedReader(ir);
   try {
    String str = in.readLine();
    if (str == null) {
     return null;
    }
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date date = df.parse(str);
    return date;
   } catch (ParseException e) {
    System.out.println("处理ParseException...");
    e.printStackTrace();
   }
  } catch (FileNotFoundException e) {
   System.out.println("处理FileNotFoundException...");
   e.printStackTrace();
  } catch (IOException e) {
   System.out.println("处理IOException...");
   e.printStackTrace();
  }
  return null;
 }
}

/*
处理FileNotFoundException...
java.io.FileNotFoundException: readme.txt (系统找不到指定的文件。)
读取的日期 = null
 at java.io.FileInputStream.open0(Native Method)
 at java.io.FileInputStream.open(Unknown Source)
 at java.io.FileInputStream.<init>(Unknown Source)
 at java.io.FileInputStream.<init>(Unknown Source)
 at com.a51cto.HelloWorld2.readDate(HelloWorld2.java:24)
 at com.a51cto.HelloWorld2.main(HelloWorld2.java:15)

 */

16.3.4. 多重捕获

Java 7推出了多重捕获(multi-catch)技术,可以帮助解决此类问题

在catch中多重捕获异常用“|”运算符连接起来。

try{

//可能会发生异常的语句

} catch (IOException | ParseException e) {

//调用方法methodA处理

}