异常的概念
异常与错误
异常的产生过程分析(分析如何产生,如何处理)
异常处理的两种方式
方式一:throws声明抛出异常,交给别人处理
/*
throws关键字:异常处理的第一种方式,交给别人处理
作用:当方法内部抛出异常的时候,我们必须处理这个异常对象
可以使用throws关键字处理异常对象,会把异常对象声明抛出给方法的
调用者处理(自己不处理,交给别人处理),最终交个JVM处理--》【中断处理】
【throws关键字须和throw关键字配套使用,抛出异常,就必须处理异常】
格式:在方法声明时使用
修饰符 返回值类型 方法名(参数列表) throws{
throw new AAAException(“产生原因“);
throw new BBBException(“产生原因“);
...
}
注意:1.throws必须写在方法声明处
2.声明的异常必须是Exception或和Exception子类
3.方法内部抛出多个异常对象,那么throws后边也必须声明多个异常
如果抛出的多个异常有父子类关系,直接声明父类异常即可
4.调用一个声明抛出异常的方法,就必须处理声明的异常
要么继续使用throws声明抛出,交给方法的调用者处理,最终交给JVM
要么try...catch自己处理异常
*/
public class DemoD {
public static void main(String[] args) throws Exception{//在方法声明多个异常
// readFile("C:\\a.xt");
}
/*
定义一个方法,对传递的文件路径进行合法性判断
如果路径不是“C:\\a.txt”,那我们就抛出文件找不到异常对象,告知方法的调用者
注意:FileNotFoundException是编译异常,抛出编译异常,就必须处理这个异常
可以使用throws继续声明抛出FileNotFoundException这个异常对象,让方法的调用者处理
*/
//如果抛出的多个异常有父子类关系,直接声明父类异常即可
// public static void readFile(String fileName) throws FileNotFoundException,IOException{//在方法声明多个异常
// public static void readFile(String fileName)throws IOException{
public static void readFile(String fileName)throws Exception{//Exception是所有异常的父类
//抛出文件路径异常
if (!fileName.equals("C:\\a.txt")){
throw new FileNotFoundException("传递文件的路径不是“C:\\\\a.txt”");
}
//抛出文件路径不是.txt结尾异常
if (!fileName.equals(".txt")){
throw new IOException("文件后缀名不对");
}
System.out.println("路径没有问题,读取文件");
}
}
方式二:try...catch...finally,手动处理
/*
异常处理的第二种方式,自己处理异常
try...catch...finally
格式:
try{
可能发生异常的代码
}catch(异常类型 异常名e){
处理异常的代码(一般都是打印异常的信息的语句)
}
...
catch(异常类型 异常名e){
}finally {
}
注意:
1.try中可能会抛出多个异常对象,那么就可以使用多个catch处理这些异常对象
2.如果try中产生了异常,那么就执行catch中的异常处理逻辑,执行结束后,继续执行try...catch后的代码
如果try中没有产生异常,那么就不会执行catch中的异常处理逻辑,执行结束后,继续执行try...catch后的代码
3.finally不能单独使用,一般用于资源释放(资源回收),无论程序是否出现异常,都要资源释放(IO)
*/
public class DemoE {
public static void main(String[] args) {
try {
//可能产生异常的代码
readFile("c:\\c.txt");
} catch (FileNotFoundException e) {//try中抛出什么异常对象,catch就定义什么异常变量,用来接收这个异常对象
//异常的处理逻辑
// System.out.println("catch~传递的路径不是c:\\a.txt");
// System.out.println(e);//java.io.FileNotFoundException: 传递的文件路径不是c:\a.txt
// System.out.println(e.getMessage());//传递的文件路径不是c:\a.txt
// System.out.println(e.toString());//java.io.FileNotFoundException: 传递的文件路径不是c:\a.txt
e.printStackTrace();
} finally {
//无论是否出现异常,都会执行
System.out.println("资源释放");
}
System.out.println("后续代码");
}
public static void readFile(String fileName) throws FileNotFoundException {
if (!fileName.equals("c:\\a.txt")) {
throw new FileNotFoundException("传递的文件路径不是c:\\a.txt");
}
System.out.println("路径没有问题,读取文件");
}
}