异常详解

异常处理语句:包括三个部分
try{
需要被检测的代码
1.代码出现异常则直接进入catch语句中,出现异常的语句之后的语句将不会执行,
如果代码正常执行则不会进入catch语句块中
2.之中定义的变量只在try中有效

}
catch(Exception e(异常类  变量))//e是堆异常的指向
{
处理异常的代码(处理方式)
方法:
1.e.printStackTrace//无返回值,异常信息,异常名称 异常出现的位置
2.e.getMessage();
3.e.toString
4.虚拟机默认异常处理机制就是使用e.printStackTrace打印信息到堆栈
}


finally
{
一定会执行的语句
}
*****************************************************************************************************
异常:
1.可处理异常(编译时期可以检测)
1.1当函数内出现了throw抛出异常对象,那么就必须要给对应的处理动作要么在内部try catch中处理要么在函数上声明要调用者处理,否则编译错误
2.不可处理异常(RuntimeException及其子类)
2.1如果函数内抛出该异常,函数上不声明,编译可以通过,如果函数上声明了该异常,调用者不处理,编译也可以通过,但运行时程序会终止
*****************************************************************************************************
对于别人调用时可能出现异常的程序:
1.可以使用throws语句进行抛出,此时调用者必须进行处理(捕捉或者抛出,
如果调用者不进行捕捉,最终会抛给虚拟机),否则会编译错误
2.一般不会抛出异常,而是自己进行处理
class Demo
{
int div(int a,int b) throws Exception //通过throws关键字声明了该功能可能出现问题
{
return a/b;
}
}


*****************************************************************************************************
对多异常的处理:
1.声明异常时,建议声明更为具体的异常,这样可以进行艮为具体的处理分析
2.存在多个catch时,会按顺序执行,对程序来说,对方声明几个异常,就有几个catch块,
如果多个catch块中的异常出现继承关系,则父类catch块应该放在下面
3.try{
………………………………
}
catch(ArithmeticException e))
{
………………………………………………
}
catch(Exception e))//这种方式并不好,会把你不知道的异常隐藏下来,而程序继续运行,发生什么自己不清楚
{
………………………………………………
}
4.建议在进行catch处理时,一定要定义具体的处理方式,不要简单地打出错误信息
将异常信息以异常日志的方式记录下来
********************************************************************************************************
自定义异常:
由于项目中会出现特有问题,而对这些问题并未被java封装,所以对于这些特有的问题可以按照java
对问题封装的思想问题,进行自定义异常封装
例如:程序中对除数是负数也视为是错误的,无法进行运算,需要自定义异常进行描述
1.当函数内出现了throw抛出异常对象,那么就必须要给对应的处理动作
要么在内部try catch中处理
要么在函数上声明要调用者处理
2.一般情况下函数内出现异常,函数上需要声明
3.如果自定义异常没有定义信息,则只会打印出异常名称
4.继承Exception的原因:
异常体系有一个特点因为异常类和异常对象都被抛出,
他们都具备可抛性,可抛性是Throwable这个体系中独有的特点
只有这个体系中的的雷和对象才可以throw和throws
5.throws使用在函数上;   throw使用在函数内
throws后面跟的是异常类可以跟多个,用逗号隔开 ; throw跟的时异常对象
class FuShuException extends Exception
{
//两种方式
1. /*private String msg;
FuShuException(String msg)
{
this.msg=msg;
}
public String getMessage()
{
return msg;
}
*/
2. super(msg);//父类中已经完成了对异常信息的封装,子类只需要调用父类的构造方法就可以将异常信息传递给父类
}
java的异常可以自动抛出也可以手动抛出,而自定义异常必须手动抛出
class Demo
{
int div(int a,int b) throws Exception //通过throws关键字声明了该功能可能出现问题
{
if(b<0)
throw new FuShuException("自定义异常信息")://手动通过throw关键字抛出自定义异常对象
return a/b;
}
}


********************************************************************************************************
RuntimeException
如果函数内抛出该异常,函数上不声明,编译可以通过
如果函数上生命了该异常,调用者不处理,编译也可以通过


之所以不用在函数声明,是因为不需要调用者处理,当异常发生后
希望程序停止,因为在运行时出现了无法继续运算的情况,希望停止程序后
对代码修正 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值