Java-------异常处理
try{}catch(){Exception e}finally{}
异常的概念:Exception所谓异常就是程序运行过程中出现了意料之外的情况。
Error:错误,无需处理。比如:断电
Exception:异常,需要处理和捕获的
非检查异常(非受检异常、未检查异常):可以避免 不强制必须处理
检查异常(受检异常、已检查异常):不可避免 必须进行异常处理,否则无法通过编译
1.1非检查异常(非受检异常、未检查异常)
可以避免,可以编译,但运行时抛出异常
如:ArithmeticException 算术异常
ArrayIndexOutOfBoundsException 数组下标越界异常
NullPointerException 空指针异常
ClassCastException 类型转换异常
InputMismatchException 输入类型不匹配异常
ClassNotFoundException 类没有找到异常
FileNotFoundException 文件没有找到的异常
1.2 检查异常(受检异常、已检查异常):
不可避免,编译时抛出异常,没法运行
如:Class.forName("A"); //查找类A,加载类A
通常在finally代码块里,放一些释放资源的工作,finally 在程序中无论如何都会被执行
处理异常的方式:
try 是必须有的。catch和finally都可以单独存在,或者二者共存。
break:跳出循环
return:结束方法
finally:try{}语句块必须要执行的代码,遇到return也不例外,除非遇到 System.exit() 才不会执行
System.exit():结束程序
子类的覆盖方法不能比父类的被覆盖方法抛出更多的异常,就是子类抛出的异常不能超过父类。
如果父类抛出的异常是Exception,则子类可以抛出所以的异常
Exception类中定义了一个message属性,并提供了一个
getMessage()方法获得message属性的值,同时提供了一个构造方法对其属性赋值Exception
一:
三种:
1.try{}catch(Exception ex){}finally{}
2.try{}finally{}
3.try{}catch(Exception ex){}
有catch必须要有try,但是有try可以没有catch
二:
声明抛出异常,抛给方法调用处,如果没有方法处理该异常,则最终由JVM来处理
(如果所以得方法调用处都不去捕获和处理异常,最终抛给JVM处理)
public static void main(String[] agrs) throws Exception{}
throws 声明处理异常
throws 后面可以声明多个异常
throws 可以应用父类异常代替子类异常
捕获异常的原则:1.先捕获子类的异常,在捕获父类的异常
2.如果有方法重写,子类重写的方法不能抛出比父类更多的异常(级别)
try{}catch(){}fianlly{} 一个try语句块中,可以有多个catch语句块
try-catch语句块可以嵌套使用
java 的异常继承结构:Throwable包括 Error和 Exception
Error:错误
Exception:程序运行中出现类意料之外的情况
Exception:包括{RuntimeException(非检查性异常)}和{(IO,Network,AWT..)等非检查性异常}
捕获处理异常的方法:
try{
//需要捕获异常的代码
}catch(Exception ex){
//处理异常
ex.printStackTrace(); //打印异常堆栈
}finally{
//必须要执行的语句
//通常放程序释放资源的代码
}
1.用try{}catch(){}处理异常
2.声明抛出异常:public void fun() throws Exception{ }
throws 声明抛出异常
throw 抛出异常对象。 throw new Exception();
注意事项:
1.如果有方法重写,子类重写的方法不能抛出比父类更多的异常
2.处理异常的原则:先捕获子类异常,再捕获父类异常
自定义异常:extends Exception
让自定义异常继承Exception
e.getMessage(); //获得异常消息
e.printStackTrace(); //处理异常
return在try-catch-finally中:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
1.e.printStackTrace();——表示打印异常的具体信息,写在catch块中
2.-1为抛出异常的习惯写法
3.如果方法中try,catch,finally中没有返回语句,则会调用这三个语句块之外的return结果
4.finally块无论如何,不管前面是正常还是异常,都要执行。
5.finally 在try中的return之后 在返回主调函数之前执行
作者: 00要加油_
链接:https://www.imooc.com/article/17141
来源:慕课网