读文网>知识>知识百科>百科知识

java中try语句和throw的区别【汇总2篇】

在编程的时候往往会出现系统编译时无法检测到的错误,可是在运行时会出错,如果在可能出错的地方抛出异常,那样便严整了代码的正确性.比如数组越界,分母为0,文件等。 编程中会用try语句和throw语句来对编程运行过程中出现的异常情况进行处理。那么这两种有什么区别呢?下面小编带你去了解一下。

java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。

Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

用try来指定一块预防所有“异常”的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的“异常”的类型。

throw语句用来明确地抛出一个“异常”。throws用来标明一个成员函数可能抛出的各种“异常”。

Finally为确保一段代码不管发生什么“异常”都被执行一段代码。可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。

每当遇到一个try语句,“异常”的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try语句。

小编举例

package book.exception;

/**

* 抛出异常和声明异常

* @author joe

*

*/

public class ThrowAndThrows {

/**

* 计算一个数字的平方根

* @param nStr 以字符串的形式提供数字

* @return 返回平方根

* @throws Exception 当用户输入的字符串为空,

* 或者字符串无法转换成数字,或者转换成的数字小于0,都会抛出异常

*/

public static double sqrt(String nStr) throws Exception {

if (nStr == null) {

https://用trow关键字抛出异常,当异常被抛出时,程序会跳出该方法

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

}

double n = 0;

try {

n = Double.parseDouble(nStr);

} catch(NumberFormatException e) {

https://将parseDouble方法可能抛出的异常NumberFormatException捕获,

https://然后将捕获的异常重新封装并输出

throw new Exception("输入的字符串必须能够转化成数字!", e);

}

if (n < 0 ){

throw new Exception("输入的字符串转化成的数字必须大于0!");

}

return Math.sqrt(n);

}

public static void main(String[] args) throws Exception {

try{

ThrowAndThrows.sqrt("-124.56");

} catch(Exception e) {

https://将sqrt方法声明的可能抛出的Exception异常捕获

https://打印捕获的异常的堆栈信息,从堆栈信息中可以发现异常发生的位置和原因

System.out.println("Got a Exception:" + e.getMessage());

e.printStackTrace();

throw e; https://不做进一步处理,将异常向外抛出

}

https://将sqrt声明了可能会抛出的异常向外抛出,必须在方法声明中使用throws

ThrowAndThrows.sqrt("-124.56");

}

}

程序输出结果:

Got a Exception:输入的字符串转化成的数字必须大于0!

java.lang.Exception: 输入的字符串转化成的数字必须大于0!

at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)

at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)

Exception in thread "main" java.lang.Exception: 输入的字符串转化成的数字必须大于0!

at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)

at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)

源码分析:

在main方法里,由于sqrt方法的声明中有throws关键字,所以,在调用该方法时,必须对throws后面声明的异常进行处置,处置的方法有两种:

(1)main方法处理该异常,使用try.....catch语句,将可能会出现的异常的代码放在try块内,将处理异常的代码放在catch块内,并指明catch能够捕获的异常的类型,当异常被捕获时,执行catch块内的语句。

(2)main方法不处理该异常,将异常向外层程序抛出。在方法声明中使用throws关键字抛出异常,方法体中不需要使用try...catch语句。

异常类Exception的getMessage方法用来获取一场的描述信息,printStackTrace方法用来打印异常的堆栈信息,通过堆栈信息能够查明异常发生的原因和位置,在调试的时候常用。

try和throw的区别

try:出现在方法体中,它自身是一个代码块,表示尝试执行代码块的语句。如果在执行过程中有某条语句抛出异常,那么代码块后面的语句将不被执行。

throw:出现在方法体中,用于抛出异常。当方法在执行过程中遇到异常情况时,将异常信息封装为异常对象,然后throw。

补充throws和catch语句

throws:出现在方法的声明中,表示该方法可能会抛出的异常,允许throws后面跟着多个异常类型

catch:出现在try代码块的后面,自身也是一个代码块,用于捕获异常try代码块中可能抛出的异常。catch关键字后面紧接着它能捕获的异常类型,所有异常类型的子类异常也能被捕获。

相关热搜

相关文章

【百科知识】热点

【百科知识】最新