Java异常处理throws,throw关键字try,catch,finally模块
2016-04-12 23:49
375 查看
Throwable
Throwable是所有的错误和异常的超类,有两大实例Error
一般不处理,由JVM抛出
Exception
可预测可处理
—–编译时异常 :只要是Exception和其子类都是,除了特殊子类RuntimeException体系都必须针对性处理
—–运行时异常 :RuntimeException和其子类,直接中断功能,停止继续运行
这是Java异常体系:
异常声明
Java中不要求在方法头显示声明Error和RuntimeException(免检异常)。但是方法抛出的其他异常都必须在方法头给出显示声明已告知方法调用者。
eg: public void method() throws Exception1,Exception2…
{
//do throw Exception1……
}
Java API中描述:
RuntimeException是那些可能在Java虚拟机正常运行期间抛出异常的超类
可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需在throws子句中声明
注意:
自定义异常类必须继承自异常体系,否则不具备抛出异常的资格
才可以被关键字throw和throws 操作
自定义异常一般继承:Exception或者RuntimeException
throws可以声明多个异常,throw用于抛出异常,在函数内
当有一个方法有多个异常时,针对异常处理catch模块的匹配是顺序匹配,所以catch超类异常类型必须定义在子类异常类型后面,简单说就是catch越具体,越靠前,否则编译出错
异常处理的基本格式
try{
//需要被检测异常的代码
}
catch (异常类 变量)
{
//处理异常的代码
}
下面这个代码块可以没有
finally
{
//一定被执行的代码
}
异常体系的基本方法:
String : ex.getMessage() 返回这个对象的消息
String : ex.toString() 返回以下三个字符串的连接:1.异常类的全名 2.“:” 3.getMessage()方法
void : ex.getStackTrace() 返回栈跟踪元素构成的数组来表示这个可抛出的栈的跟踪信息
printStackTrace() 在控制台上打印Throwable对象以及它的调用栈的跟踪信息
实际开发中一般用第三方包
关于finally模块
/有一种情况不会执行finally模块catch
{
//处理
System.exit(0);退出jvm
}
Finally
{
//即便所有catch模块都不匹配也会执行
}
Finally用处:通常用于关闭(释放)资源
比如数据库
连接数据库
查询 Exception
关闭连接
注意:
子类覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类异常或者该异常的子类
如果父类跑出多个异常,那么子类只能抛出父类异常的子类
如果父类的方法没有抛出异常,那么子类覆盖式决不能抛出异常
代码演示:
import java.util.Scanner; class InputException extends Exception { InputException() {} InputException(String msg) { System.out.println("……异常……"); } } class ExceptionDemo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("输入长和宽:"); double width = input.nextDouble(); double height = input.nextDouble(); try { method(width,height); } catch (InputException ex) { System.out.println("请重新输入"); System.out.println("getMessage(): "+ex.getMessage());//返回这个对象的消息:String System.out.println("toString(): "+ex.toString());//返回以下三个字符串的连接:1.异常类的全名 2.“:” 3.getMessage()方法:String System.out.println(ex.getStackTrace());//返回栈跟踪元素构成的数组来表示这个可抛出的栈的跟踪信息:void ex.printStackTrace();//在控制台上打印Throwable对象以及它的调用栈的跟踪信息 //jvm默认的异常处理机制就是调用异常对象的这个方法。 } } static double method(double width,double height) throws InputException { if (width<=0 || height<=0) { throw new InputException("输入不合理"); } else return width*height; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树