我试图通过使用try catch块或抛出异常方法来捕获以下代码中的异常。我已尝试使用try catch块并在代码中的不同位置抛出异常方法但我仍然无法捕捉异常
package thowsexception;
import java.io.IOException;
import java.rmi.AccessException;
public class IOexception {
public int example1(int i, int j) throws ArithmeticException {
int k ;
if (i == 0){
throw new ArithmeticException("cannot Divide By 0");
}
return i /j ;
// try {
//
// k = i/j ;
// }
//
// catch (ArithmeticException e){
//
// System.out.println("Error: Don't divide a number by zero");
// }
}
}
主类
package thowsexception;
import java.io.IOException;
public class IOexception {
public static void main(String[] args) throws ArithmeticException {
example e = new example();
e.example1(5,0);
}
}
答案 0 :(得分:6)
你可以用不同的方式解决这个问题
public int example1(int i, int j) throws ArithmeticException {
if (j == 0) {// you should check j instead of i
throw new ArithmeticException("cannot Divide By 0");
}
return i / j;
}
OR
public int example1(int i, int j) throws ArithmeticException {
try {
return i / j;
}
catch (ArithmeticException e) {
throw new ArithmeticException("Error: Don't divide a number by zero");
}
}
但第一个正确而不是第二个,因为未经检查的异常表示编程错误,编程错误应该是固定的,并且大多数时候由于用户在用户程序交互期间提供的错误数据而发生这些异常,所以我们应该防止这些类型的错误,而不是抓住它。
详细了解better-understanding-on-checked-vs-unchecked-exceptions-how-to-handle-exception-better-way-in-java
答案 1 :(得分:2)
您当前的代码说明了这一点:
if (i == 0) {
throw new ArithmeticException("cannot Divide By 0");
}
return i/j ;
这个问题是你要检查分数i的分子是否等于0.如果分子是0,则分数很好,因为你没有除以0.你需要检查如果j == 0,因为你要除以j。
if (j == 0) {
throw new ArithmeticException("cannot Divide By 0");
}
return i/j ;
是正确的代码。
答案 2 :(得分:1)
您可以采取以下措施来捕捉异常
主类
package thowsexception;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
IOexception e = new IOexception();
try { e.example1(5,0);
}
catch (ArithmeticException e1){
}
}
}
IOexception Class
package thowsexception;
import java.io.IOException;
import java.rmi.AccessException;
public class IOexception {
public void example1(int i, int j) {
int k = i/j;
}
}