异常
前言:
异常5个关键字:
try、catch、finally、throw、throws
1、try:
执行可能产生异常的代码
try:将可能出现的代码块写进try中,用于后续捕捉
2、catch:
捕捉异常
catch 所代表的代码块,只有在与他相匹配的try捕捉到异常并处理,然后给用户合理提示。
try{
//将会发生异常的内容
}catch(Exception e){
//声明当前的catch 能够处理的异常类型
}
3、finally:
无论是否发生异常,代码总能执行
无论 与之匹配的 try 有没有发生异常,都会执行 finally中的代码块
4、throw:
①、手动抛出异常
②、在方法体中使用
③、抛出的是异常对象
throw new +异常类型(“ 带参”);
④、在 throw 后不可以继续写业务逻辑
⑤、使用throws后,必须此方法头使用throws声明可以会抛出的异常类型
5、throws:
①、声明该方法可能抛出的异常类型
②、在方法头后,方法体前使用
③、当开发人员调用的一个方法有throws的声明,需要去处理该异常
声明方法可能要抛出各种异常(一般四个以内)
总结:
1、java中常见的异常:
1、算术异常:ArithmeticExecption
2、空指针异常:NullPointerException
3、数组下标越界异常:ArrayIndexOutOfBoundsException
4、未找到类异常:ClassNotFoundException
5、类型转换异常:ClassCastException
6、数字格式转换异常:NumberFormatException
7、非法参数异常:IllegalArgumentException
8、访问null的对象方法、空指针:NullPointerException
9、方法未找到异常:NoSuchMethodException
10、数组负长度异常:NegativeArrayException
11、违背安全原则异常:SecturityException
12、文件已结束异常:EOFException
13、文件未找到异常:FileNotFoundException
14、输入输出异常:IOException
2、异常处理体系:
异常处理原则:
1、为了保证程序能够继续执行
2、对用户友好
3、自定义异常
1、所有的异常类的父类是 Exception
1、创建一个类
2、继承 Exception 类
3、按需要去定义构造器
4、异常中return关键字
一 . finally 语句块一定会执行吗?
在下述4种特殊情况时,finally块都不会被执行:
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。
二 . 如果执行了finally,函数返回值问题
原理:对于这种情况个人感觉可以理解为:就是在 return的时候会把返回值压入栈,并把返回值赋值给栈中的局部变量, 最后把栈顶的变量值作为函数返回值。
总结:所以可得:retuen在 finally中执行,其返回值就会覆盖 try/catch中的返回值;如果 finally中不执行 return语句,在 finally中修改返回变量的值,不会影响返回结果。