黑马程序员_异常

------- android培训java培训、期待与您交流! ----------



异常



JAVA中的异常

Error

该类异常是较严重的异常,叫做Error,该类异常不应该是试图捕获,因为通常比较严重,程序会自动终止运行。
该类异常是Throwable的子类。


该类只有4个重载的构造方法,通常用于构造判断条件。同时,该类异常不用在throws中声明


Exception

该类异常是预知的可能出现的异常,写作Exception,也是类Throwable的子类。
该类异常可以被捕获。并且通常在编译期就会被捕获处理。
如果是使用throws抛出异常,需要在throws后声明抛出的异常类型。


RuntimeException

该类异常指的是运行期异常,该类异常在编译期并不捕获,而在运行期才捕获。
该类异常不需要在throws中声明。

该类是Exception的子类




异常的处理

try……catch代码块捕获

基本格式如下:
			try{
				可能出现异常的代码块
			}catch( 要捕获的异常的类型1 ){
				捕获后要做的动作
			}catch( 要捕获的异常的类型2 ){
				捕获后要做的动作
			}


程序会先运行try中的代码块,如果出现异常,并且异常在是catch中声明要捕获的类型,则在捕获后执行相应的catch代码块中的内容。
需要注意的是,因为异常之间存在继承关系,所以子类异常应该放在父类异常之上,否则子类异常永远不会被捕获。
如:
		try {
			file.canRead();
		} catch (Exception e) {
			System.out.println("出现异常");
		} catch (IOException e) {
			System.out.println("出现IO异常");
		}
		IO异常永远也不会被捕获到,所以,应该改为:
		try {
			file.canRead();
		} catch (IOException e) {
			System.out.println("出现IO异常");
		} catch (Exception e) {
			System.out.println("出现异常");
		}
		


throws声明抛出异常

该关键字应用于方法名后。
格式如下:
方法名( 形式参数 ) throws 异常列表……
throws会将异常捕获列表中出现的异常抛出给函数的调用者。


		public static void main(String[] args) throws IOException{
			File file = new File("a.ex");
			file.createNewFile();
			file.delete();
		}


此处,main方法声明抛出IOException,若存在IOException的对象,则会被抛给main方法的调用者。


throw语句

该语句可以抛出一个异常,通常使用的方法如下:
throw new 一个要抛出的异常。
如:
		public static void main(String[] args) throws IOException{
			throw new IOException();
		}


此处会抛出一个IOException对象给main方法,并由main方法抛给其调用者。

4、finally代码块
finally代码块的语句永远会被执行,无论是否发生异常。
finally代码块使用时必须放在try……catch代码块之后,若无try……catch代码块,则finally代码块也无法使用。
一般格式:
		try {
			可能发生异常的代码
		} catch (Exception e) {
			处理异常的操作
		}
		finally{
			一定会执行的操作
		}


自定义异常

只要将类声明为Throwable的子类,就能自定义异常。
将类声明为RuntimeException的子类,就能自定义运行时异常。
例:
			public static void main(String[] args) {
			try {
				throw new NewException();
			} catch (NewException e) {
				System.out.println("捕获了新异常");
			}
			finally{
			}
		}


		class NewException extends Throwable{
	
		}


运行结果会显示:捕获了新异常

注意事项

1、try……catch代码块与throws抛出异常,两种方案通常只使用一种,即,如果使用try……catch捕获处理异常,则不使用throws声明抛出异常,反之不用捕获处理。
2、finally一定会被执行,但此过程可以不是程序返回的结果。
如:
		public static void main(String[] args) {
			System.out.println(testExcuteSequence());


		}


		private static int testExcuteSequence() {
			int x = 0;
			try {
				x = 10;
				throw new NewException();
			} catch (NewException e) {
				x = 30;
				return x;
			} finally {
				x = 20;
			}


		}


程序的返回结果会是 30。
因为执行的顺序是:
try前代码——》try中代码——》发生异常——》catch代码块——》返回了x——》finally代码块——》调用者的代码
如果在finally块中加上一个输出语句,会发现输出20,再输出30。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值