gpt4 book ai didi

java - 捕获异常并返回自定义消息

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:56 24 4
gpt4 key购买 nike

所以我正在做一些学校作业,如果满足“if”语句之间的条件,我必须抛出异常。

public class Fibonacci {
private static final long MAX = 91;

public static long finonacciGetal(int n) {
if (n > MAX || n < 0) throw new FibonacciException();
else {

long eerste = 0;
long tweede = 1;
long getal = 0;

for (int i = 0; i < n; i++) {
getal = eerste + tweede;
eerste = tweede;
tweede = getal;
}
return getal;
}
}

现在我创建了一个自定义异常,它返回一条错误消息,但它仍然继续打印出堆栈跟踪。那么有没有办法从 Exception 类本身隐藏它呢?因为如果我使用 try-catch block ,它会不断出现我的返回值问题,因为赋值使用了局部变量。程序应该在抛出 1 个异常后停止

提前致谢!

编辑:根据我的自定义异常的要求

public class FibonacciException extends ArithmeticException {
public FibonacciException() {
super();
System.out.println("Max value surpassed");
}

最佳答案

这样做的技巧确实是使用 try catch block ,因为您提到变量都是本地的,所以您可能只需要将它们放在 try catch block 之外。

编辑

所以,现在我更详细地了解了这个问题。我想我明白困惑的来源。你被告知如果迭代次数超过最大值就抛出异常,这是一种很好的方法,但现在你需要一种方法来处理这个异常项。

那么,让我们使用您的原始代码:

public class Fibonacci {
private static final long MAX = 91;

public static long finonacciGetal(int n) {
if (n > MAX || n < 0) throw new FibonacciException();
else {

long eerste = 0;
long tweede = 1;
long getal = 0;

for (int i = 0; i < n; i++) {
getal = eerste + tweede;
eerste = tweede;
tweede = getal;
}
return getal;
}
}
}

这很好,真的。现在,如果您查看抛出异常的情况,您的局部变量中的任何值都尚未计算,这很好因为,此异常意味着有人试图将此方法与一个值一起使用那超出了您允许的范围。确保使用此类的人正在处理您的异常的一种方法是在方法声明中添加一个 throws 子句,如下所示:

public class Fibonacci {
private static final long MAX = 91;

public static long finonacciGetal(int n) throws FibonacciException {
if (n > MAX || n < 0) throw new FibonacciException();
else {

long eerste = 0;
long tweede = 1;
long getal = 0;

for (int i = 0; i < n; i++) {
getal = eerste + tweede;
eerste = tweede;
tweede = getal;
}
return getal;
}
}
}

这样,当有人像这样使用它(比如 main)时:

public static void main(String[] args) {
try{
System.out.println(new Fibonacci().fibonacciGetal(92));
}catch(FibonacciException e){
System.out.println(e.getMessage());
}
}

您会注意到您必须在使用它的方法中使用 try/catch,这是处理这些情况的正确方法。

关于java - 捕获异常并返回自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21008696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com