我在Java错误中知道的程度可以通过两种方式报告:返回值和异常。 例如,下面的代码:
int methodName(int i, int j) {
int result;
try {
result = i / j;
return result;// in the case of j = 0, ArtithmeticException() will be thrown
}
catch (Exception e) {
System.out.println("Some message");
}
//return result;
}
如果j = 0
异常将被抛出并被捕获(通过catch)。并打印消息。
问题是:如果我不想在除以零的情况下从这个方法返回任何结果,我仍然必须返回一些值或者还有另一种方法吗?使用catch子句中的'throw'?
另一个观察结果:如果我取消注释最后'返回结果'语句,我收到一条错误消息:
变量结果可能尚未初始化
如果我评论最后'返回结果',我收到一条错误消息:
缺少退货声明
但我已经在try子句中包含了return语句。
感谢。
答案 0 :(得分:2)
如果j = 0,将抛出异常并捕获(通过catch)。并打印消息。问题是:如果我不想在除以零的情况下从这个方法返回任何结果,我仍然必须返回一些值或者还有另一种方法吗?使用catch子句中的'throw'?
您必须返回与签名(本例中为int
)或throw
匹配的值,否则程序将无法编译。
另一个观察结果:如果我取消注释上一个
return result
语句,我收到一条错误消息: 变量结果可能尚未初始化
result
块中分配了try
变量。
编译器不知道可能发生异常的确切位置。
如果在分配完成之前发生异常,
然后在return result
陈述点,
变量result
可能没有值。
解决方案是在try
块之前设置一个值。
如果我评论最后'返回结果',我收到一条错误消息: 缺少退货声明 但是我已经在try子句中包含了return语句。
在此示例中,如果try
块中发生异常,
然后执行catch
块和函数体的其余部分,
并且没有其他return
语句来匹配方法的签名。
您必须在所有执行路径上返回int
值。
答案 1 :(得分:1)
您希望通过以下示例代码实现您想要实现的目标
由于ArithmeticException是RuntimeException,并且在j = 0的情况下,异常将传播到调用函数。
int methodName(int i, int j) {
return i/j;
}
答案 2 :(得分:1)
也许是这样的:
static int methodName(int i, int j) {
if (j == 0) throw new ArithmeticException();
return i/j;
}
你也可以使用Integer类型作为结果并将其初始化为null,你的代码将编译:
Integer result = null;
无论哪种方式,调用代码都需要处理异常或可能的空值。
答案 3 :(得分:0)
您可能观察到的一件事是变量的scope
。
如果想要调用void
方法,以便return
> ;但是,仍然可以更改变量的值,可以将他们想要的变量放在全局范围内。
以下是演示的示例:
public class MyClassName{
//global scope int
public static int result;
//main method
public static void main(String[] args){
//Let's see what we start at
System.out.println("By default im at: " + result);
//Attempt to set global variable as the result of a 0 division
methodName(1,0);
System.out.println("I tried to divide by zero but I'm still at: "+result);
//Attempt to perform normal calculation 25/5
methodName(25, 5);
System.out.println("25 divided by 5 is: "+result);
}
//method that changes global variable - void means it returns nothing
public static void methodName(int i, int j) {
try {
//try 1 / 0
result = i / j;
}
catch (Exception e) {
System.out.println("CATCH:I failed to divide by zero.");
}
}
}
输出:
By default im at: 0
CATCH:I failed to divide by zero.
I tried to divide by zero but I'm still at: 0
25 divided by 5 is: 5
请注意主要方法之外的全局变量的定位。
在此示例中,变量result
的值仍然更改,但不一定是return
。