1.异常:未按程序预期的正常执行即为异常
2.常见异常有:
算术异常:ArithmeticExecption
空指针异常:NullPointerException
数组下标越界异常:ArrayIndexOutOfBoundsException
类型转换异常:ClassCastException
数组负下标异常:NegeativeArrayException
字符串转换为数字异常:NumberFormatException
输入类型不匹配:InputMisMatchException
3 异常的捕获与抛出
捕获异常 try --catch--finally
1 try{ 2 //监控区 3 //可能存在的异常的代码 4 }catch( 异常类型 e){ 5 // 如果try没有发现异常。忽略所有的catch块 6 //如果 try 中报错了,此时匹配异常类型,执行此处代码, 7 // 如果代码走到catch中,则默认被解决了 8 }catch(xxx e){ 9 //catch 可以有多个,本条处理异常为xxx的异常 10 }catch(xxxxx e){ 11 //本条处理异常为xxxxx 的异常 12 }finally{ 13 //finally块是可选的,但是有finally块的话,无论异常是否发生或者是否处理,finally都会执行 14 }
注意:
1.try中没有异常的话直接忽略所有的catch代码
2.如果try发生异常,异常之后的代码就不会执行,会跳过然后去catch中匹配有没有解决这个异常的代码
2.1如果有,则执行catch中的代码,只要执行了catch中的代码,则认为异常已解决,程序会继续执行try--catch之后的代码
2.2如果没有,程序会报错,不再向下执行
3.在编写catch中的异常类型时,范围必须由小到大
4.finally 表示一定会执行的代码,不管是否异常
*除非出现手动关闭程序:System.exit( 0 );
5.如果 try-catch 中存在return的话,finally 还会执行,而且先执行finally在执行return
示例:
1 public class Demo { 2 public static void main(String[] args) { 3 try{ 4 System.out.println("纷纷"); 5 System.exit(0); 6 System.out.println(2/0);//算数异常 7 System.out.println("二");//前一代码异常,此条不执行 8 }catch(NullPointerException e){//未匹配解决方案,继续向下执行 9 System.out.println("si"); 10 }catch(ClassCastException e){ //未匹配到解决方法,五其他解决方法,报错,终止运行 11 System.out.println("输错了"); 12 // }catch(Exception e){ //exception 所有异常 13 // e.printStackTrace();//输出异常信息 14 // System.out.println("呜呜呜");//注释部分为测试部分,不影响执行 15 }finally{ 16 System.out.println("finally"); 17 } 18 System.out.println("wulalala"); 19 } 20 }
抛出异常:throw ,throws
throws
public int division( ) throws Exception{
//表示此方法被调用的时候可能存在异常,
//throws ,抛出异常,抛给调用者 }
throw
try{ //可能发生的异常 }catch(Exception){ throw new Exception ( e );//用new 的方式,抛出异常 }
throw | throws |
生成并抛出异常 | 声明方法内抛出异常 |
位于方法体内部,可作为单独语句使用 | 必须跟在参数列表后面,不能单独使用 |
抛出一个异常对象,且只能一个 | 声明抛出异常类型,可以跟多个异常 |
//无论异常是否发生,异常是否匹配被处理,finally都会执行。 //finally块通常是可选的。