异常体系的超类是Throwable,下面有Error类和Exception类,Error类属于严重问题,不需要处理,Exception类属于异常类,
它表示程序本身可以处理的类。Exception类下面又有两个类,分别为RuntimeException类和非RunTimeException类,,前者
在编译期不检查,后者在编译期就得处理。
try{ 可能出现的代码; } catch(异常类名 变量名){ 异常的处理代码; }
程序从try开始执行,出现异常,会自动生成异常类对象(相当于new 了一个对象),被提交给java运行时系统,再去catch中匹配异常类,
找到后进行异常处理,处理完再继续运行。注意:自己写了异常处理代码后,能够继续执行,不然程序会停止。异常处理可以用
printStackTrace()方法来处理,虽然在控制台输出的东西是差不多的,但是这样我的程序能够继续运行。
有getMessage,toString,printStackTrace方法,最后一个信息最全最常用。
编译时异常:必须显示处理,否则程序会发生错误,无法通过编译.也就是利用try...catch...来处理,比如当用到SimpleDataFormat
类中的parse方法时,就会提示有一个未处理的异常ParseException,那就得在catch的()里添加这个异常类的对象
运行时异常:无需显示处理,也可以跟编译时异常一起处理,显示处理指的是自己写个try...catch...
需要注意的是,编译时异常不一定就会出错,可能出错,也可能不出错。比如给了一个日期的字符串,如果与给定日期格式不匹配会报错
,更多的得积攒更多案例了。
try...catch...可以处理一些异常,但是不是所有情况我们都有权限进行异常处理。如果出现,java提供了throws处理方案,针对编译
时和运行时,throws 异常类名;这个格式是跟在方法的括号后面的。
1.自定义一个异常类,只需要定义一个继承自Exception或者RuntimeExceptions的类即可,并提供个无参构造,有参构造即可。
2.在类的方法内部用throw抛出异常对象的时候,需要在类名()后面加上throws 异常类名。不过前面的做法是基于异常类继承自
Exception类的时候,即编译时异常。如果继承自RuntimeExceptions,后面加不加throws都一样。现在还不知道为什么。。。
3.在测试类调用方法体中会抛出异常的类的方法时,编译时异常必须显示处理,即用try...catch...
throws 和 throw的区别:
throws | throw |
---|---|
用在方法声明后面,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
表示抛出异常,由该方法的调用者来处理 | 表示抛出异常,由方法体内的语句处理 |
表现出现异常的一种可能性,并不一定真会异常 | 执行throw一定抛出了某种异常 |
注意throw跟的对象名可以用new 。。。就是匿名对象,更方便。