嘿StackOverflow社区,
我正在尝试编写引发并捕获我所犯的多个异常的代码。 可能是什么问题?
我想获得以下输出:
Doing risky
Boi
Fooi
Fooi
Fooi
FINAAAL WIN
主类如下:
public class Dorisk {
public static void main(String[] args) {
Dorisk dora = new Dorisk();
try {
dora.Dorisky(1);
}catch(BoinkException bo){
System.out.println("Boi");
}catch(FooException fo){
System.out.println("Fooi");
}catch(BazException ba){
System.out.println("Baaai");
}finally{
System.out.println("FINAAAL WIN");
}
}
public void Dorisky(int x)throws BazException{
while( x < 5 ){
System.out.println("Doing risky");
if(x ==1){
throw new BoinkException();
}
if(x ==2){
throw new BiffException();
}
if(x ==3){
throw new BarException();
}
if(x ==4){
throw new FooException();
}
x++;
}
}
}
例外是:
public class BazException extends Exception{
public BazException(){
System.out.println("Baz baja");
}
}
public class FooException extends BazException{
public FooException(){
System.out.println("Foo baja");
}
}
public class BarException extends FooException{
public BarException(){
System.out.println("Bar baja");
}
}
public class BiffException extends FooException{
public BiffException(){
System.out.println("Biff baja");
}
}
public class BoinkException extends BiffException{
public BoinkException(){
System.out.println("Boink baja");
}
}
但我得到的是:
Doing risky
Baz baja
Foo baja
Biff baja
Boink baja
Boi
FINAAAL WIN
什么告诉我只有doRisky方法中的第一个Exception被抛出,为什么?
谢谢您的回答!
编辑:我明白了!抛出的第一个Exception会打印所有其他消息,因为它们是在Exception超类的构造函数中声明的,并且必须对其进行构造,以便子类可以运行。
答案 0 :(得分:0)
您的Dorisky
方法在x = 1时引发异常。
表示Dorisky
方法返回了BoinkException
的调用者方法作为例外。
if(x ==1){
throw new BoinkException();
}
首先,为什么要返回多个异常?
这不是正确的设计方法。顺便说一句...我为您的理解而实施。
在这里,我为每个抛出创建了CustomException,并创建了ExceptionList来保存抛出异常的列表。
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static ArrayList<Exception> ex = new ArrayList<Exception>();
private static class CustomException extends Exception {
int i;
public CustomException(int i) {
this.i = i;
}
public String toString() {
return "Exception: " + i;
}
}
private static class ExceptionList extends Exception {
ArrayList<Exception> ex = new ArrayList<Exception>();
public ExceptionList(ArrayList<Exception> ex) {
this.ex = ex;
}
public ArrayList<Exception> getEx() {
return ex;
}
}
public static List<Exception> process() throws Exception {
int i = 0;
while(i < 5) {
if(i == 1) {
ex.add (new CustomException(i));
} else if(i==2) {
ex.add (new CustomException(i));
} else if(i==3) {
ex.add (new CustomException(i));
}
i++;
}
if(ex.size() > 0) {
throw new ExceptionList(ex);
} else {
return null;
}
}
public static void main (String[] args) throws java.lang.Exception
{
try {
new Ideone().process();
} catch(ExceptionList ex) {
for(Exception ei : ex.getEx()) {
System.out.println(ei.toString());
}
}
}
}
Output
Exception: 1
Exception: 2
Exception: 3