您的位置:首页 > 编程语言 > Java开发

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;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息