Contents
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处理
}