您的位置:首页 > 其它

throws,throw,try,catch,finally 分别代表什么意义

2015-05-11 00:00 761 查看
摘要: JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分
别代表什么意义?在 try 块中可以抛出异常吗?

JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分

别代表什么意义?在 try 块中可以抛出异常吗?这里面参考博文

package com.yuan.test;

public class TestThrowable {
/**
* 计算一个数字的平方根
* @param nStr    以字符串的形式提供数字
* @return    返回平方根
* @throws Exception    当用户输入的字符串为空,
* 或者字符串无法转换成数字,或者转换成的数字小于0,都会抛出异常
*/
public static double sqrt(String nStr) throws Exception {
if (nStr == null) {
//用trow关键字抛出异常,当异常被抛出时,程序会跳出该方法
throw new Exception("输入的字符不能为空!");
}
double n = 0;
try {
n = Double.parseDouble(nStr);
} catch(NumberFormatException e) {
//将parseDouble方法可能抛出的异常NumberFormatException捕获,
//然后将捕获的异常重新封装并输出
throw new Exception("输入的字符串必须能够转化成数字!", e);
}
if (n < 0 ){
throw new Exception("输入的字符串转化成的数字必须大于0!");
}
return Math.sqrt(n);
}

public static void main(String[] args) throws Exception {
try{
TestThrowable.sqrt("-124.56");
} catch(Exception e) {
//将sqrt方法声明的可能抛出的Exception异常捕获
//打印捕获的异常的堆栈信息,从堆栈信息中可以发现异常发生的位置和原因
System.out.println("Got a Exception:" + e.getMessage());
e.printStackTrace();
throw e;    //不做进一步处理,将异常向外抛出
}

//将sqrt声明了可能会抛出的异常向外抛出,必须在方法声明中使用throws
System.out.println(TestThrowable.sqrt("-124.56"));
}

}

源码分析:
在main方法里,由于sqrt方法的声明中有throws关键字,这是因为方法中有throw异常方法,并且没有对方法进行try...catch 操作。

throw new Exception("输入的字符不能为空!");

所以,在调用该方法时,必须对throws后面声明的异常进行处置,处置的方法有两种:
(1)main方法处理该异常,使用try.....catch语句,将可能会出现的异常的代码放在try块内,将处理异常的代码放在catch块内,并指明catch能够捕获的异常的类型,当异常被捕获时,执行catch块内的语句。
(2)main方法不处理该异常,将异常向外层程序抛出。在方法声明中使用throws关键字抛出异常,方法体中不需要使用try...catch语句。
异常类Exception的getMessage方法用来获取一场的描述信息,printStackTrace方法用来打印异常的堆栈信息,通过堆栈信息能够查明异常发生的原因和位置,在调试的时候常用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  throws throw try catch
相关文章推荐