异常和枚举

异常
一:异常
异常是改变程序正常执行流程的意外情况。
异常的条件都是应用级别的异常。系统级别
的异常程序员无法处理。
异常:是一个对象,Exception
class Exception{
发生问题的主体(Object)
对问题本身的有效描述(String)
}

二:异常的结构
try{
//可能出现异常的代码

int k= 10/0;


}catch(ExceptionType1 e){
…//针对ExceptionType1类型的异常处理
}catch(ExceptionType2 e){
…//针对ExceptionType2类型的异常处理
}

}finally{
//不管是否碰到异常,都要执行该代码,
//收尾工作(关闭数据库,释放资源…)
}

catch中异常类型小异常放在上面
大异常放在下面

异常:是对象,java.lang.Exception
抛出异常:在try中业务逻辑代码出现异常情况,
系统会自动产生异常对象,将该异
常对象抛出给java运行时环境。
这个过程称之为抛出异常。
捕获异常:java运行时环境接受到异常对象,
会根据异常对象寻找相应的catch块。
这个过程称之为捕获异常。
如果找不到相应的catch块,
将异常对象交给java运行
时环境,JAVA运行时环境会直接中
断应用程序,并且会打印异常栈的信息。
异常栈的信息会知道在哪行代码出现了什么样的异常。
处理异常:异常处理的代码

三:异常的原理
当发生异常的时候,系统将自动抛出异常对象
寻找异常处理代码,如果没有找到,将上抛到
方法的调用处,依次类推,直到抛给虚拟机程序终止。
异常栈可以找到异常真正发生的原因。
main(){
a();
}
a(){
b(); ///处理异常
}
b(){
c();
}
c(){
///Exception
}
c()---->b()---->a()---->main()—>JVM
在c()中发生异常,且所有方法都没有异常处理,所有方法的栈区是否被锁定?(会)
有多少方法牵扯进来了,就会有多少方法的栈区被锁定了
方法的嵌套调用是非常危险的,栈区被锁定,会等待着内存的释放
方法的递归调用也是很非常危险的,你不一定知道调用的次数
建议:不要有过分复杂的方法嵌套调用,
不要使用调用次数可能过多的递归算法

getMessage():返回该异常的详细描述字符串
printStackTrack():将该异常的跟踪栈信息输出到标准错误输出

四:异常分类
Exception
uncheck异常(RuntimeException异常):
包含RuntimeException及子类
在编译期的不需要捕获的异常
不可修复的异常,如连接数据库发生异常
不需要继续向下执行。
check异常:在编译期的必须捕获的异常
可以修复的异常,如输入错误金额,用户名输入错误。处理之后可以继续向下执行。
Exception的子类除了RuntimeException。
如Class.forName("")
五:异常处理的方式
1)try—catch:自己处理异常
2)throws:自己不处理异常,抛出调用者处理异常。
原则:如果自己能够处理的异常,
就不要抛出调用者处理异常。

六:自定义异常
1)在项目中建议不抛出系统异常,
因为异常的类名通常应该包含该异常的有用信息。
应该选择合适的异常类,从而可以明确的描述该异常情况,
就应该选择自定义异常。
2)可以把uncheck异常转化为check异常
可以把check异常转化为uncheck异常
自定义check异常:
class MyException extends Exception
自定义uncheck异常:
class MyException extends RuntimeException

throws 异常类型:方法申明的时候抛出异常
throw 异常对象:方法体中抛出异常

七:断言jdk1.4之后
开发过程中,在需要的时候提供判断功能.
用if判断效率很低,用断言可以提高效率
在AssertTest.java加上断言assert b==0:“my assert”;
默认情况下,断言是关闭的,所以在运行的时候打开断言输入vm参数-ea
断言是在1.4版本之后增加的,如果对1.4版本之前的系统进行重写。
需要确认assert是否被用作标识符

八:异常和系统效率
异常处理会影响系统效率,建议只在适当的时候做必要处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值