JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分java
别表明什么意义?在 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 操做。spa
throw new Exception("输入的字符不能为空!");
因此,在调用该方法时,必须对throws后面声明的异常进行处置,处置的方法有两种:
(1)main方法处理该异常,使用try.....catch语句,将可能会出现的异常的代码放在try块内,将处理异常的代码放在catch块内,并指明catch可以捕获的异常的类型,当异常被捕获时,执行catch块内的语句。
(2)main方法不处理该异常,将异常向外层程序抛出。在方法声明中使用throws关键字抛出异常,方法体中不须要使用try...catch语句。
异常类Exception的getMessage方法用来获取一场的描述信息,printStackTrace方法用来打印异常的堆栈信息,经过堆栈信息可以查明异常发生的缘由和位置,在调试的时候经常使用。
.net