有没有长一点点自定义异常的抛出和捕获;Java内置异常的捕获与处理eclipse能运行的代码
时间: 2024-02-16 10:04:35 浏览: 64
以下是一个稍微长一点的Java程序示例,演示了如何自定义异常的抛出和捕获,以及Java内置异常的捕获与处理:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int num = scanner.nextInt();
try {
if (num <= 0) {
throw new InvalidNumberException("输入的数字必须为正整数。");
}
int result = factorial(num);
System.out.println(num + "的阶乘是:" + result);
} catch (InvalidNumberException e) {
System.out.println("Exception caught: " + e.getMessage());
} catch (Exception e) {
System.out.println("Exception caught: " + e.getMessage());
} finally {
scanner.close();
}
}
public static int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n - 1);
}
}
class InvalidNumberException extends Exception {
public InvalidNumberException(String message) {
super(message);
}
}
```
以上代码中,我们定义了一个InvalidNumberException自定义异常类,用于表示输入的数字不是正整数的异常。在Main类中,我们使用Scanner类从控制台输入一个数字,如果输入的数字小于等于0,则会抛出InvalidNumberException异常。在try-catch块中,我们捕获了InvalidNumberException异常和所有的Exception异常,并打印出异常信息。在finally块中,我们关闭了Scanner对象。
此外,在factorial方法中,如果输入的数字为1,则返回1,否则递归计算阶乘。如果递归层数过多,会抛出StackOverflowError异常,这个异常是Java内置异常之一。如果发生了这个异常,我们也会在catch块中捕获并打印出异常信息。
以上代码可以在Eclipse中运行,运行效果如下:
```
请输入一个正整数:-1
Exception caught: 输入的数字必须为正整数。
```
```
请输入一个正整数:5
5的阶乘是:120
```
```
请输入一个正整数:10000000
Exception caught: java.lang.StackOverflowError
```
阅读全文