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

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方法用来打印异常的堆栈信息,通过堆栈信息能够查明异常发生的原因和位置,在调试的时候常用。

你可能感兴趣的:(catch,try,throw,throws)