任务描述
本关任务:在 main 方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减 1 生成一个整数值,输出第一个字符串长度是生成整数值的多少倍,如果有异常的话,抛出异常。
相关知识
throws 关键字
在之前的实训中,我们学习了如何处理捕获异常,但是有时候我们想偷个懒,不自己处理这些异常,可不可以呢?
答案是可以的!
我们可以将自己不想处理的异常交给别人来处理,那么怎么实现呢?
很简单,我们只需要用 throws 关键字抛出该异常即可。
例如:
编写以上代码我们发现 IDE 报错了,提示我们这里有异常要处理,但是如果我们不想处理,就可以这样:
可以发现 test 方法内部没有报错了,但是调用 test 方法的地方报错了。是什么原因呢?
抛出异常,就像我们平常所说的“甩锅”,总有一个人要背锅,在 Java 中也一样异常最终总是要被处理或者被捕获的,所以我们如果在方法的括号后面抛出一个异常,那么该方法的调用者是必须要捕获这个异常或者将这个异常继续抛出的。
所以上面的错误就会有两种解决办法。
第一种:将异常捕获并处理:
第二种:把“锅”甩给 Java 虚拟机处理,自己不处理:
在 main 方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减 1 生成一个整数值,输出第一个字符串长度是生成整数值的多少倍,如果有异常的话,抛出异常。
import java.util.Scanner;public class Exc1Test {// 请在Begin-End间编写代码/********** Begin **********/// 第一步:创建任意方法并抛出异常public static void test() throws Exception{// 第二步:接收给定的两个字符串Scanner input = new Scanner(System.in);String str1 = input.next();String str2 = input.next();// 第三步:把第二个字符串的长度减1,得到一个整数值int a = str2.length() - 1;// 第四步:输出第一个字符串长度是整数值的多少倍int s = str1.length() / a;System.out.println(s);}public static void main(String[] args) {// 第五步:调用创建的方法,并捕获异常,输出"除数不能为0"try {test();} catch (Exception e) {System.out.println("除数不能为0");}}/********** End **********/}