<异常>
异常:异常是指在程序的运行过程中所发生的不正常事件,会中断正在运行的程序
常见的异常类型:
1.Exception 异常层次结构的父类
2.ArithmeticException 算数错误情形,如以零作被除数
3.ArrayIndexOutOfException 数组下标越界
4.NullPointerException 尝试访问null对象成员
5.ClassNotFoundException 不能加载所需的类
6.IIlegalArgumentException 方法接收到非法参数
7.ClassCastException 对象强制类型转换出错
8.NumberFormatException 数字格式转换异常,如:把“abc”转换成数字
异常处理机制
Java编程语言使用异常处理机制为程序提供了错误处理的能力
关键词:try【执行可能出现异常的代码】,catch【捕获异常】,finally【无论是否有异常都会执行的代码】,
throw【抛出异常】,throws【声明异常】
使用try-catch-finally块捕获异常:public void print(){
try{ //可能出现异常的代码 }
catch(异常类型 自定义对象名){ //对捕获到的异常进行处理 }
finally{ //无论是否出现异常都执行的代码 } }
注:只有一种情况下finally中的代码不执行:system.exit( 1); //直接中断程序,退出Java虚拟机
面试题:说出存着return的try-catch-finally块的执行顺序?
例: public void print(){
try{ //可能出现异常的代码 return ;}
catch(异常类型 自定义对象名){ //对捕获到的异常进行处理; return ;}
finally{ //无论是否出现异常都执行的代码 } }
注:存着return的try-catch-finally块执行顺序:无论return在try代码块还是在catch块中都会执行finally代码后再return出去
多重catch块:
public void print(){
try{ //可能出现异常的代码 }
catch(异常类型1 自定义对象名){ //对捕获到的异常进行处理; }
catch(异常类型2 自定义对象名){ //对捕获到的异常进行处理; }
finally{ //无论是否出现异常都执行的代码 } }注:多重catch块 必须先写子类(类型1:InputMismatchException),最后才是父类(类型2:Exception)
声明异常及抛出异常:
关键词:throws,throw
throws:声明某个方法可能抛出各种异常,多个异常用逗号隔开(必须跟在方法参数列表后面,不能单独使用)
throw:生成并抛出异常(位于方法体内部,可作为单独语句使用,一个throw只能抛出一个异常)
例:public void setSex(String sex) throws Exception//声明异常{
if(sex.equals("男")||sex.equals("女")){ this.sex=sex; //给人的性别赋值,必须是”男女“,否则就会出现异常 }
else{ //抛出异常 throw new Exception("性别只能为男或女"); } }