前言
计算机在程序运行的过程中,总会遇到各种各样的错误。
而健壮的代码必须可以应对各种的错误。
如何知道自己的程序哪里出了问题呢?
下面介绍一种方法。
java内置了一套异常处理机制,就相当于用异常来代替了错误,这样程序就可以正常的运行啦~
注意:异常是一种类!!!!所有的异常都是Exception的子类。
try-catch方法:
用try标可能出现异常的语句,然后后面使用catch语句捕获异常信息。
下面是一个例子:
//捕获异常
try {
openTheFile;
}catch(fileopenFailed)
有时候一段代码会抛出多种异常:
new FileInputStream(f);
Date d=sdf.parse("2016-06-3");
这段代码会同时抛出文件不存在异常(FileNotFoundException)以及解析异常(PraseException),解决办法之一就是分别进行catch。
public class DoExercise {
//异常的相关练习
public static void main(String[] args) {
// TODO Auto-generated method stub
File f = new File("d:/LOL.exe");
try {
System.out.println("试图打开 d:/LOL.exe");
new FileInputStream(f);
System.out.println("成功打开");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse("2016-06-03");
} catch (FileNotFoundException e) {
System.out.println("d:/LOL.exe不存在");
e.printStackTrace();
} catch (ParseException e) {
System.out.println("日期格式解析错误");
e.printStackTrace();
}
}
}
还有一种方法就是把多个异常放到一个catch里面捕捉:
catch(FileNotFoundException|ParseException e){
}
这种方法的使用使得代码更加的紧凑,但是不确定具体的异常是什么了。
package exception;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestException {
public static void main(String[] args) {
File f = new File("d:/LOL.exe");
try {
System.out.println("试图打开 d:/LOL.exe");
new FileInputStream(f);
System.out.println("成功打开");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse("2016-06-03");
} catch (FileNotFoundException | ParseException e) {
if (e instanceof FileNotFoundException)
System.out.println("d:/LOL.exe不存在");
if (e instanceof ParseException)
System.out.println("日期格式解析错误");
e.printStackTrace();
}
}
}
同时注意finally的用法,无论异常有没有被执行,finally中的代码都会被执行
package exception;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class TestException {
public static void main(String[] args) {
File f= new File("d:/LOL.exe");
try{
System.out.println("试图打开 d:/LOL.exe");
new FileInputStream(f);
System.out.println("成功打开");
}
catch(FileNotFoundException e){
System.out.println("d:/LOL.exe不存在");
e.printStackTrace();
}
finally{
System.out.println("无论文件是否存在, 都会执行的代码");
}
}
}