黑马程序员-异常


----------- android培训 java培训 、java学习型技术博客、期待与您交流! ------------
(感觉自己最近为了赶进度,很久没有总结回顾以前的知识,今天开始要深刻反思)

异常

1.1.异常概念:就是程序出现的不正常情况


1.2.异常体系:

Throwable类
|--Error类 严重的问题,是处理不了的。要改正代码的。
|--Exception类 非RuntimeException的,是需要处理的。编译期异常。
|--RuntimeException类 不需要处理的,是需要改代码的。运行期异常。
例如:
Error:地震,海啸。
Exception:感冒了,头疼。

1.3.java虚拟机的默认处理方法.

把异常的类名,原因,位置等信息显示在控制台。
一旦有异常发生,其后的代码不能继续执行

1..4.异常的解决方案.

A:try方式
基本格式
	try{
		可能发生异常的代码;
	}catch(异常类名 变量名){
		异常的处理代码;
	}finally{
		释放资源的代码;
	}


注意:一旦有一次发生,就会立马执行catch里面的代码
变形格式:

try...catch
try...catch...catch
try...catch...catch...finally
try...finally


注意: JDK7针对多个catch进行了优化: catch(异常1 | 异常2 | 异常3 ... 变量){}
这些异常必须是平级关系。
和try...catch...catch的不同点是:
JDK7的这种方案是必须平级关系,不能有子父关系。
而try...catch...catch父亲放最后是可以的。
B:抛出处理
用throws关键字在方法上声明(抛出)。(这种方法比较消极,不推荐使用)

1.5.Exception和RuntimeException的区别.

A:
Exception 编译时期异常,必须处理的。
如果在方法上,throws了该类型的异常,将来调用者必须处理。
如果在方法内部,throw了该类型的异常,必须在方法上throws该异常。
B:
RuntimeException 运行时期异常,是不需要处理的。要改代码的。
如果在方法上,throws了该类型的异常,不需要处理。
如果在方法内部,throw了该类型的异常,方法上可以throws该异常,也可以不throws该异常。

1.6.关于异常我的总结

throw:
1.
使用在方法内部,格式为:throw <异常对象>. (只能是单个对象)
2.throw不可以单独使用,要么搭配throws,将异常抛出给调用方法者;要么搭配try-catch-finally处理掉该异常.
throws:
1.
使用在方法声明上,在参数列表后与方法体前,格式为:throw <异常类>.(可以单个或者多个类,逗号分割)
2.throws可以单独使用,将可能抛出的异常抛出给调用方法者处理.(如果是主方法上使用,即由jvm异常处理机制处理). 

try{}:
try{}的大括号中,放入的为执行中可能会出现异常的代码.如果当中的代码在执行时出现异常,就会通过或人工定义(使用throw)或系统自动生成并抛出异常对象.
注意:当try{}代码块中执行时出现异常,抛出异常对象,下面的代码就不会执行了.

catch(){}:
catch(){}的小括号中为参数,参数应为对应try{}抛出异常对象的异常类或其父类.其大括号中为针对此异常的处理代码.当try{}抛出异常,由catch(){}捕获并处理.
这里因为对应的try{}可能抛出多种异常,可以一个try{}对应多个catch(){}.当然,()中对应的应为对应的每种异常类,而且遵从子类异常优先,父类异常殿后的顺序.
注意:JDK7的新特性,可以在catch(){}的参数中同时对应多个异常类,用|分割.

finally{}:
finally{}的大括号中放入的代码,无论try{}是否抛出异常catch(){}是否执行,它都会执行.一般用于关闭资源操作.
注意:有几个特殊情况
1.如果在try{}和catch(){}中出现了System.exit(0)语句,那就没办法,不执行了.
2.如果try{},catch(){}中出现了return语句,则finally{}中代码和return代码同时执行.
3.如果2中finally{}中也出现了return语句,那么先前的return语句会被finally{}中的return语句覆盖执行.
我的测试代码:
	//代码体现
	public static void main(String[] args) throws Exception{
		new Test8().demoMethod();//调用方法中声明了异常,这里必须处理或者上抛.(这里我上抛,没处理)
	}
	
	//方法中的异常处理方式.
	public void demoMethod() throws Exception{//如果方法中可能抛出异常,而没有对应的try-catch处理,那么就可以用throws向调用者声明,方法中会出现异常,由调用者处理.
		try {
			/*
			 * 运行可能会出现异常的代码.
			 */		
			//if()的括号中为认为定义应该抛出某个异常的条件
			if (true) {
				throw new Exception();//抛出某一异常对象.
			}
		} catch (Exception e) {
			/*
			 *  对应捕获到的异常进行的处理.
			 */
		}finally{
			/*
			 * 必然会执行的代码.例如:关闭资源.删除临时文件.
			 */
		}
		
	} 




-----------android培训java培训、java学习型技术博客、期待与您交流! ------------
详情请查看:http://edu.csdn.net/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值