Java中级内容——异常处理(exceptionhanding)
Java中级内容——异常处理(exception handing)
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:/");// 试图打开⽂件,会抛出FileNotFoundException,如果不处理该异常,就会有编译错误
try{
new FileInputStream(f);
System.out.println("⽂件正常打开");
}
catch(FileNotFoundException e){
System.out.println("⽂件不到,请检查");
e.printStackTrace();
}
}
}
输出结果:
<⽂件不到,请检查
java.io.FileNotFoundException: d:\ (系统不到指定的⽂件。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at Exception.TestException.main(TestException.java:13)
知识点:如何打开⼀个⽂件。注意导⼊的三个包File,FileInputStream,FileNotFoundException.
问题:try_catch没学过,不知道⽤法。
⼆、如何处理
异常处理常见⼿段: try catch finally throws
1、try catch
1.将可能抛出FileNotFoundException ⽂件不存在异常的代码放在try⾥
2.如果⽂件存在,就会顺序往下执⾏,并且不执⾏catch块中的代码
3. 如果⽂件不存在,try ⾥的代码会⽴即终⽌,程序流程会运⾏到对应的catch块中
4. e.printStackTrace(); 会打印出⽅法的调⽤痕迹,如此例,会打印出异常开始于TestException的那⼀⾏,这样就便于定位和分析到底哪⾥出了异常。Stack指的是栈调⽤,从输出的结果信息最下⾯层层调⽤。
2、使⽤异常的⽗类进⾏catch
FileNotFoundException是Exception的⼦类,使⽤Exception也可以catch住FileNotFoundException。
问题:
1.按F3查看FileNotFoundException源⽂件时,出现the jar file has no source attachment,⽆法查看源码。参考,顺利解决问题。
2.输出结果显⽰中有Unknown Source,⽆法查到源码中对应的程序。
public class TestException {
public static void main(String[] args){
File f =new File("d:/");// 试图打开⽂件,会抛出FileNotFoundException,如果不处理该异常,就会有编译错误
try{
new FileInputStream(f);
System.out.println("⽂件正常打开");
}
//catch(FileNotFoundException e) {
catch(Exception e){
System.out.println("⽂件不到,请检查");
e.printStackTrace();
}
}
}
3、多异常捕捉办法1
解决办法之⼀是分别进⾏catch,把可能出现问题的代码都放在try⾥⾯,然后分别进⾏catch。
注意:如果第⼆个catch是ParseException,则前⾯的catch不能是Exception⽽需要⽤FileNotFoundException,否则会出现错误Unreachable catch block for ParseException. It is already handled by the catch block for Exception。
ParseException;
SimpleDateFormat;
import java.util.Date;
public class TestException {
public static void main(String[] args){
File f =new File("d:/");// 试图打开⽂件,会抛出FileNotFoundException,如果不处理
该异常,就会有编译错误
try{
new FileInputStream(f);
System.out.println("⽂件正常打开");
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse("2016-09-27");
}
catch(FileNotFoundException e){
System.out.println("⽂件不到,请检查");
e.printStackTrace();
}
catch(ParseException e){
System.out.println("⽇期格式解析错误");
e.printStackTrace();
}
}
}
4、多异常捕捉办法2
另⼀个种办法是把多个异常,放在⼀个catch⾥统⼀捕捉。这种⽅式从 JDK7开始⽀持,好处是捕捉的代码更紧凑,不⾜之处是,⼀旦发⽣异常,不能确定到底是哪种异常,需要通过instanceof 进⾏判断具体的异常类型。
注意:只需要写⼀个e.printStackTrace();就⾏。e引⽤所指对象为catch括号中错误类型对象。
ParseException;
SimpleDateFormat;
import java.util.Date;
public class TestException {
public static void main(String[] args){
File f =new File("d:/");// 试图打开⽂件,会抛出FileNotFoundException,如果不处理该异常,就会有编译错误
try{
new FileInputStream(f);
System.out.println("⽂件正常打开");
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse("2016-09-27");
}
catch(FileNotFoundException | ParseException e){
if(e instanceof FileNotFoundException){
System.out.println("⽂件不到,请检查");
}
if(e instanceof ParseException){
System.out.println("⽇期格式解析错误");
}
e.printStackTrace();
}
unknown怎么处理}
}
5、finally(⾯试考察点)
⽆论是否出现异常,finally中的代码都会被执⾏。⽐如⽤来执⾏数据库的关闭⼯作,⽆论前⾯是否运⾏正常,finally都会将其关闭。
ParseException;
SimpleDateFormat;
import java.util.Date;
public class TestException {
public static void main(String[] args){
File f =new File("d:/");// 试图打开⽂件,会抛出FileNotFoundException,如果不处理该异常,就会有编译错误
try{
new FileInputStream(f);
System.out.println("⽂件正常打开");
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse("2016-09-27");
}
catch(FileNotFoundException | ParseException e){
if(e instanceof FileNotFoundException){
System.out.println("⽂件不到,请检查");
}
if(e instanceof ParseException){
System.out.println("⽇期格式解析错误");
}
e.printStackTrace();
}
finally{
System.out.println("⽆论⽂件是否打开,它都会被执⾏");
}
}
}
6、throws
考虑如下情况:
主⽅法调⽤method1
method1调⽤method2
method2中打开⽂件
method2中需要进⾏异常处理
但是method2不打算处理,⽽是把这个异常通过throws抛出去
那么method1就会接到该异常。 处理办法也是两种,要么是try catch处理掉,要么也是抛出去。
method1选择本地try catch住 ⼀旦try catch住了,就相当于把这个异常消化掉了,主⽅法在调⽤method1的时候,就不需要进⾏异常处理了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。