博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaSE】day12_异常(Exception)
阅读量:4305 次
发布时间:2019-05-27

本文共 4172 字,大约阅读时间需要 13 分钟。

【JavaSE】day12_异常(Exception)

1.try-catch

1)异常捕获机制中的try-catch

 * try中包含的是可能出错的代码片段。

 * catch用来捕获try中出现的错误,并处理

2)catch可以写很多个,针对不同的异常,若有不同的处理手段,可以分别捕获。但是应当有一个好的习惯,就是在最后一个捕获中来捕获Exception,这样至少可以保证程序不会因为一个未捕获的异常而导致中断。

   当catch的异常中存在父子类继承关系时,要保证子类异常在上,父类异常在下。

细节见代码:

package day03;/** * 异常捕获机制中的try-catch * try中包含的是可能出错的代码片段。 * catch用来捕获try中出现的错误,并处理。 * */public class ExceptionDemo1 {	public static void main(String[] args) {		System.out.println("start");				try{			String str = "a";			System.out.println(str.length());			System.out.println(str.charAt(0));			System.out.println(Integer.parseInt(str));			//try中出错的代码之下的语句都不会执行			System.out.println("hello");		}catch(NullPointerException e){			System.out.println("空指针异常");		}catch(StringIndexOutOfBoundsException e){			System.out.println("下标越界");		/*		 * catch可以写很多个,针对不同的异常,若有不同的处理		 * 手段,可以分别捕获。但是应当有一个好的习惯,就是在		 * 最后一个捕获中来捕获Exception,这样至少可以保证程序		 * 不会因为一个未捕获的异常而导致中断。		 * 		 * 当catch的异常中存在父子类继承关系时,要保证子类异常		 * 在上,父类异常在下。		 */		}catch(Exception e){			System.out.println("未知异常!");		}				System.out.println("end!");					}}

2.finally块

1)finally块必须定义在异常捕获机制的最后。

 * 可以定义在try之后(try-finally),也可以定义在最后一个catch之后(try-catch-finally)。

 * finally可以保证其内部的代码无论try中的语句是否出现异常都会执行。

 * 通常像释放资源这类代码就应当放在finally中,比如说关闭流。

代码演示:

package day03;/** * finally块 * finally块必须定义在异常捕获机制的最后。 * 可以定义在try之后(try-finally),也可以定义在 * 最后一个catch之后(try-catch-finally)。 * finally可以保证其内部的代码无论try中的语句是否 * 出现异常都会执行。 * 通常像释放资源这类代码就应当放在finally中,比如说 * 关闭流。 * */public class ExceptionDemo2 {	public static void main(String[] args) {				try{			String str = null;			System.out.println(str.length());		}catch(Exception e){			System.out.println("出错了!");		}finally{			System.out.println("finally语句块");		}			}}

3.throw与throws的用法

1)通常两种情况会使用throw抛出一个异常:

 * 1.程序中遇到了一个满足语法要求,但是不满足业务逻辑要求的情况时,可以自行创建一个异常的实例并抛出给调用者。

 * 2.程序执行过程中确实出现了一个异常,但是不应当在当前方法中解决时,可以将其抛出给调用者。

2) 当一个方法上使用throws声明抛出某些异常时,我们在调用该方法时要求必须处理这些异常。 处理手段有两种:

       * 1:自行try-catch捕获并处理。

       * 2:在当前方法上继续使用throws声明将这些异常抛出。

代码演示:

package day04;/** * 用来测试throw与throws的用法 * * 通常两种情况会使用throw抛出一个异常: * 1.程序中遇到了一个满足语法要求,但是不满足业务逻辑 *   要求的情况时,可以自行创建一个异常的实例并抛出给 *   调用者。 * 2.程序执行过程中确实出现了一个异常,但是不应当在当 *   前方法中解决时,可以将其抛出给调用者。 */public class Person {	private int age;	public int getAge() {		return age;	}	/*	 * 当给定的实参值不满足这里的取值要求时(不满足描述人类	 * 信息的业务逻辑)可以抛出一个异常通知调用者。	 */	public void setAge(int age) throws IllegalAgeException {		if(age<=0||age>100){			throw new IllegalAgeException("不符合人类年龄");		}		this.age = age;	}				}
package day04;/** * 测试异常的抛出 * */public class PersonTest {	public static void main(String[] args) {		Person p = new Person();				try {			/*			 * 当一个方法上使用throws声明抛出某些异常时,我们			 * 在调用该方法时要求必须处理这些异常。			 * 处理手段有两种:			 * 1:自行try-catch捕获并处理。			 * 2:在当前方法上继续使用throws声明将这些异常抛出。			 */			p.setAge(1000);		} catch (IllegalAgeException e) {			System.out.println(e.getMessage()); //获取信息			e.printStackTrace(); 		}				System.out.println(p.getAge());					}}

4.子类重写父类含有throws抛出异常的方法时的注意事项

package day04;import java.awt.AWTException;import java.io.IOException;/** * 测试子类重写父类含有throws抛出异常的方法时的注意事项: * */public class Father {	public void dosome() throws IOException,AWTException{			}}class Son extends Father{	//重写的三个可以两个不可以		/**	 * 重写时允许不再抛出任何异常。	 *///	public void dosome(){//		//	}		/**	 * 重写时也可以仅抛出父类方法抛出的部分异常。	 *///	public void dosome() throws AWTException{//		//	}		/**	 * 重写时允许抛出父类型方法中抛出的异常的子类异常。	 *///	public void dosome() throws FileNotFoundException{//		//	}		/**	 * 重写时,不允许抛出额外异常	 * 即:父类没有的,也不是父类抛出异常的子类型异常。	 *///	public void dosome() throws SQLException{ //编译错误//		//	}		/**	 * 重写时,不允许抛出父类抛出异常的父类型异常。	 *///	public void dosome()throws Exception{ //编译错误//		//	}	}

5.自定义异常

package day04;/** * 自定义异常,通常用来描述某个业务逻辑级别的错误。 * 年龄不合法。 */public class IllegalAgeException extends Exception {	private static final long serialVersionUID = 1L;	public IllegalAgeException() {		super();		// TODO Auto-generated constructor stub	}	public IllegalAgeException(String message, Throwable cause) {		super(message, cause);		// TODO Auto-generated constructor stub	}	public IllegalAgeException(String message) {		super(message);		// TODO Auto-generated constructor stub	}	public IllegalAgeException(Throwable cause) {		super(cause);		// TODO Auto-generated constructor stub	}	}

转载地址:http://erews.baihongyu.com/

你可能感兴趣的文章
bzoj 3534: [Sdoi2014]重建【矩阵树定理】
查看>>
xmlapp 如何配置
查看>>
django QuerySet 的常用API
查看>>
大道至简阅读笔记02
查看>>
R是什么
查看>>
gcc/g++命令认识
查看>>
jq的ajax封装
查看>>
需求分析与原型设计
查看>>
【C++】STL,vector容器操作
查看>>
通过内存分析工具来证明字符串驻留机制
查看>>
[转] Leaving patterns & practices
查看>>
《ASP.NET Web API 2框架揭秘》样章(PDF版本)
查看>>
如何实现跨域!
查看>>
H5 网站支付宝支付(前端部分)包含微信浏览器中的处理方法。
查看>>
2017年年终总结
查看>>
面向对象-组合使用
查看>>
Docker最全教程之使用Node.js搭建团队技术文档站(二十三)
查看>>
潜移默化学会WPF(样式篇)---改造CheckBox,全新metro风格 - AYUI框架 - 博客园
查看>>
WPF - 善用路由事件
查看>>
Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定)
查看>>