1.14(java学习笔记)异常机制
2018-08-02 05:53:30来源:博客园 阅读 ()
异常不同于错误,它是程序运行时产生的未知问题。
如果把程序比喻成一辆汽车,那么汽车开着开着突然前面出现了一个大石头挡住了路,这就叫异常。
那么出现了这个异常我们需要去处理,比如打电话给公路管理局,让它们搬走石头。
如果是汽车的发动机坏了,这叫错误。
即使程序本身没有问题,也会因为各种因素产生异常。
java秉承面向对象的思想,将异常也以类和对象的形式存在。
一、异常类的结构
异常和错误都继承于Throwable,
在Exception和Error下面还有许多具体的子类,这个可以自行查阅文档。
这样将异常类划分详细,便于出现对应异常时,便于编写对应的异常处理语句。
Exception主要是异常类,Error中是错误类。
像下面用到的try {}catch(这里面的类型主要是Exception 类下的子类){}
异常类中也有很多方法,大家可以自行查阅文档。
这里说一个printStackTrace()方法,作用是打印异常的详细信息。
二、在程序中使用异常处理
try{ //可能出现异常的语句 }catch(异常类 异常对象){ //编写异常处理语句 }catch(异常类 异常对象){ //编写异常处理语句 }catch(异常类 异常对象){ //编写异常处理语句 }catch(异常类 异常对象){ //编写异常处理语句 }finally{ //一定会运行到的语句 }
出现异常时:
(1)首先系统会实例化一个异常类的对象,
(2)然后try中自动捕获异常对象
(3)然后跳转到catch语句,逐个匹配最合适的异常类,执行该异常类下的异常处理语句
(4)最后跳转到finally,执行其中的语句。
没有异常时:try中语句执行完后,直接跳转到finally,执行其中的语句。
注:1.一个try{}中只能捕获一个异常。
2.try中当一个语句出现异常后就会跳转到catch,try中该语句之后的语句不会执行。
public class TestException { public static void main(String[] args) { int i = 1, j = 0; try{ int temp = i / j; //此行有问题,j为0,所以在此之后的System.out.println(temp);不会被执行。 System.out.println(temp); }catch(ArithmeticException e){ e.printStackTrace(); }finally{ System.out.println("finally"); //无论异常与否,finally都会执行 } } }
finally
at cn.ch.testException.TestException.main(TestException.java:
3.catch中的异常类顺序要从小到大。
例如有如下继承结构:
写异常处理时可以这样写
public class TestException { public static void main(String[] args) { int i = 1, j = 0; try{ int temp = i / j; System.out.println(temp); }catch(ArithmeticException e){ e.printStackTrace(); //先小类,后大类。
System.out.println("我是Arithmetic异常类,和抛出的异常对象最匹配") //因为捕获到异常后是逐次匹配,把大类(例如Exception)写在前面的话 }catch(RuntimeException e){ //所有异常都是这个大类,后面的异常都是无用的,而且不精确。 e.printStackTrace();
//异常处理语句 }catch(Exception e){ e.printStackTrace();
//异常处理语句 } finally{ System.out.println("finally"); } } }
运行结果: java.lang.ArithmeticException: / by zero at cn.ch.testException.TestException.main(TestException.java:11)
我是Arithmetic异常类,和抛出的异常对象最匹配 finally
三、throws和throw
1.在定义一个方法时,可以使用throws声明,后面加上可能出现的异常类型。
那么这些异常不在该方法中处理,而是交给调用者去处理。
public class TestException { static int add(int x, int y) throws Exception{//此处用throws声明,异常交给调用 return x + y; //的地方去处理。 } public static void main(String[] args) { int a1 = 2; int a2 = 3; try { System.out.println(add(a1, a2));//此处调用了,就必须要处理。 } catch (Exception e) { e.printStackTrace(); } } }
2.throw
利用throw可以人为抛出一个异常,然后try语句进行捕获抛出,然后catch进行匹配。
可知,throw就是将系统自动创建异常对象改为了自己创建异常对象。后面仍然是指catch中
匹配合适的异常类,指向改类中的语句,最后跳转到finally。
唯一的不同就是将系统自动创建改为了人为创建异常对象。
public class TestException { public static void main(String[] args) { try { throw new Exception("自己抛出的异常"); } catch (ArithmeticException e) { //e.printStackTrace(); System.out.println("我是ArithmeticException类异常,和手动抛出的异常类型不匹配"); }catch(Exception e){ e.printStackTrace(); System.out.println("我是Excep类的异常,和手动抛出的异常类型匹配。"); } } }
运行结果:
java.lang.Exception: 自己抛出的异常
我是Excep类的异常,和手段动出的异常类型匹配。
at cn.ch.testException.TestException.main(TestException.java:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash