我在java中实现了一个固定大小的Queue,它使用一个常量大小的ArrayList作为底层容器,我的 front()方法应该返回Queue的前面元素。
public T front(){
try{
if(isEmpty())
throw new Exception("Queue is Empty- can't return Front element.");
return arrayList.get(frontIndex);
}catch (Exception e){
System.out.println(e);
}
}
通过以上方式编码,我希望 front()仅在没有抛出Exception的情况下返回值,但是正如预期的编译器显示“缺少返回语句”。 “那么,有没有办法只有在没有抛出Exception的情况下才能使函数返回。
答案 0 :(得分:3)
由于您在代码中捕获异常,因此编译器显示缺少return语句错误。
你可以实现像这样的功能:
public T front() throws Exception {
if(isEmpty()) {
throw new Exception("Queue is Empty- can't return Front element.");
}
return arrayList.get(frontIndex);
}
最后在调用function / client
时处理异常答案 1 :(得分:1)
我希望front()仅在没有抛出异常的情况下返回值
修辞问题:如果抛出异常,你想要返回什么?
这是问题所在。您已将front()
声明为返回某些内容(T
的实例)。这意味着有两种相关的方式 1 来终止对front()
的调用:
它可以通过返回符合类型T
的内容来正常终止。
它可以通过抛出未经检查的异常而异常终止。
您无法返回"没有",因为front()
必须返回一个值。
您无法抛出已检查的异常(例如Exception
),因为front()
未被声明为抛出任何异常。
那你能做什么?
您可以更改方法签名,以便抛出SomeException
,其中SomeException
来自Exception
。 (投掷Exception
是一个非常糟糕的主意......)
您可以将throw new Exception
更改为throw new SomeException
,其中SomeException
来自RuntimeException
。
假设null
是引用类型,您可以返回T
。 (如果T
是类型参数,那将是。)
1 - 实际上,还有其他几种方法,但它们在这种情况下没有用处。例如,您可以调用System.exit(int)
并终止JVM。 (并且有一些方法可以构建代码,以便在return
调用之后不需要(冗余)throw
或exit
。提示:无限循环不会在'需要返回。)
答案 2 :(得分:0)
如果您之后捕获它,为什么要使用该例外?您必须返回T
或抛出异常。但是,由于您正在捕获它,因此该方法不会抛出异常。这样做是不容易的:
public T front() throws SomeException{ // if SomeException is checked you need to declare it
if(isEmpty())
throw new SomeException("Queue is Empty- can't return Front element.");
return arrayList.get(frontIndex);
}
您还应该使用更具体的例外,而不是例外。
答案 3 :(得分:0)
此“示例”显示了你可以抛出异常并返回值
的可能性private boolean throwExReturnValue() throws NullPointerException {
try {
throw new NullPointerException("HAHA");
}
finally {
return true;
}
}
private void ExceptionHanler() {
boolean myEx;
try {
myEx = throwExReturnValue();
/** code here will still execute & myEx will have value = true */
} catch (Exception ex) {
/** will execute or not (depending on VM) even we throwed an exception */
}
/** code will still execute */
}
编辑:
我尝试使用两个不同的VM,令我惊讶的是抛出异常第二个是跳过catch块并执行代码,因此它取决于VM的实现