开篇导文
看标题名字就知道我之前还有一篇异常的文章,这一篇是接着上一篇继续写的,我先把上一篇的链接给贴出来,是带有连贯性的,是一个异常的知识结构体系java异常第一篇,好了开篇导文就说到这里,上次说到异常的父类以及实现类,下面就是今天要分享的异常第二篇啦。
自己处理异常的实现
我们自己如何处理异常呢?有俩种
第一种:try…catch…finally
第二种:throws 抛出
其实写过代码,学过java的人对于这俩种方式都是非常熟悉的,我写的每一篇都是深入细节,简单点说就是知道代码每一步都做了什么事情,如果看到这里,对于异常的每一步脑海里还没有很多细节性的东西,或者对异常觉得自己还有很多地方很模糊,那就接着往下看吧,我会带着你逐步了解异常的细节。
先说第一种try…catch…finally
五种实现格式:
try…catch…finally
try…catch…
try…catch…catch…
try…catch…catch…fianlly
try…finally
代码解释:
//第一种格式
try {
可能出现问题的代码;
}catch(异常名 变量名) {
针对问题的处理;
}finally {
释放资源;
}
//第二种格式
try {
可能出现问题的代码;
}catch(异常名 变量名) {
针对问题的处理;
}
//第三种格式
try {
可能出现问题的代码;
}catch(异常名 变量名) {
针对问题的处理;
}catch(异常名 变量名) {
针对问题的处理;
}
//第四种格式
try{
可能出现问题的代码;
}catch(异常名 变量名){
针对问题的处理;
}catch(异常名 变量名){
针对问题的处理;
}finally{
释放资源;
}
//第五种格式
try{
可能出现问题的代码;
}finally{
释放资源;
}
代码需要注意的点:
1.try里面的代码越少越好(因为:try里的代码都要走系统的异常处理机制,每一行代码都会消耗系统资源,里面代码过多就会影响程序的运行速度)
2.catch里面要有内容,哪怕是一个输出语句(可以给用户一个温馨提示,说明是什么问题。如果没有的话,客户也不知道程序出了什么问题,影响用户体验)
3.平级关系的异常谁前谁后无所谓,如果出现了子父关系,父必须在后面。
(在try里面发现问题后,jvm会帮我们生成一个异常对象,然后把这个对象抛出,和catch里面的类进行匹配。如果该对象是某个类型的,就会执行该catch里面的处理信息。)
4.catch里的异常名能明确的尽量明确,不要用父类的来处理。(每次系统匹配异常的时候,都会找到具体的异常类,如果给的是Exception,系统就会从Exception的众多子类中找到具体的异常类,然后才会抛出。下面是查询API的Exception的子类截图
之所以说明这个的原因还是节约系统资源)
5.被finally控制的语句体一定会执行(注意:
如果在执行到finally之前jvm退出了,就不能执行了。这里贴一段代码,,可以贴到自己的编码工具里看看效果。)
//代码导的所有包
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//类名
public class FinallyDemo {
public static void main(String[] args) {
String s = "2014-11-20";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = null;
try {
d = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
System.exit(0);//这里可以查阅APISystem类里的exit方法(作用是使jvm正常退出)
} finally {
System.out.println("这里的代码是可以执行的");
}
System.out.println(d);
}
}
异常中要了解的几个方法:
(1)public String getMessage():异常的消息字符串
(2) public String toString():返回异常的简单信息描述
此对象的类的 name(全路径名)
": "(冒号和一个空格)
调用此对象 getLocalizedMessage()方法的结果 (默认返回的是getMessage()的内容)
(3)printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。把信息输出在控制台。
(因为这里是我自己做的总结,如果看起来比较懵的话,可以到API里自行查阅这几个方法,我这里对printStackTrace()方法打印出来的错误信息做一个解剖
)
今天try…catch…finally就说完了,下一篇详细
说明自己处理的第二种方式 throws