抛出我自己的例外?

时间:2012-09-26 08:06:10

标签: java eclipse exception exception-handling

我已经定义了自己的预科班:

public class ProduktException extends Exception {

    public ProduktException(String msg){
    //null
    }

    public static void throwProduktNotCreatedException() throws ProduktException {
        throw new ProduktException("Cannot be created!");
    }

    public static void throwProduktNotDeletedException () throws ProduktException {
        throw new ProduktException("Cannot be deleted!");
    }
}

我的问题是我在尝试时不知道如何抛弃它们:

try {
...
} catch(ProduktNotDeletedException e) {
    e.toString();
}

这不起作用......但我想拥有这些结构!有什么问题?

我宣布你的答案!!!

更新

我的问题是,我不想创建几个异常类,我希望在一个类中包含所有异常。可能有解决方案吗?

4 个答案:

答案 0 :(得分:1)

如果您需要区分不同类型的异常,只需创建两个不同的异常,可能是:

public class ProduktException extends Exception
{
    public ProduktException(String msg){
    //null
    }
}

然后:

public class ProduktNotDeletedException extends ProduktException
{
    ....
}

public class ProduktNotCreatedException extends ProduktException
{
    ....
}

然后你可以抓住一个或另一个,或两者兼而有之。

try {
    ...
} catch(ProduktNotDeletedException e1) {
    e1.toString();
} catch(ProduktNotCreatedException e2) {
    e2.toString();
} 

编辑:

对于单个班级,我的意思是:

public class ProduktException extends Exception {

    boolean notDeleted;
    boolean notCreated;

    public ProduktException(String msg){
        super(msg);
    }

    public boolean isNotDeleted() {
        return(notDeleted);
    }

    public boolean isNotCreated() {
        return(notCreated);
    }

    public static void throwProduktNotCreatedException() throws ProduktException {
        ProduktException e = new ProduktException("Cannot be created!");
        e.notCreated = true;
        throw e;
    }

    public static void throwProduktNotDeletedException () throws ProduktException {
        ProduktException e = new ProduktException("Cannot be deleted!");
        e.notDeleted = true;
        throw e;
    }
}

然后在你的try / catch中:

try {
    ...
} catch(ProduktException e) {
    e.toString();
    if(e.isNotCreated()) {
        // do something
    }
    if(e.isNotDeleted()) {
        // do something
    }
}

答案 1 :(得分:0)

你需要抓住ProduktException,例如

try {
  ...
} catch (ProduktException e) {
  e.toString();
}

或声明子类型,例如

public ProduktNotDeletedException extends ProduktException

您可能希望在构造函数中传递消息,因此在构造函数中添加以下内容:

super(msg);

答案 2 :(得分:0)

下面给出的语法。

class RangeException extends Exception
{
    String msg;

    RangeException()
    {
        msg = new String("Enter a number between 10 and 100");
    }
}

public class MyCustomException
{
    public static void main (String args [])
    {
        try
        {
            int x = 1;

            if (x < 10 || x >100) throw new RangeException();
        }
        catch(RangeException e)
        {
            System.out.println (e);
        }
    }
}

答案 3 :(得分:0)

如果你不想为你需要抛出的每种不同类型的异常创建ProduktException的多个子类,你可以做的是在异常中包含一个代码,让你知道什么是错的。像这样:

public class ProduktException extends Exception {
    private Code exceptionCode;  
    private String message 

    public ProduktException(Code code, String msg){
        this.message = msg;
        this.exceptionCode = code;
    }  

    //Getters and setters for exceptionCode and message      
}

代码可以是枚举,以便您的应用程序可以知道每个代码对应于特定的“问题”(产品未创建,产品未删除等)。然后你可以抛出这样的例外

throw new ProduktException(Code.PRODUCT_NOT_CREATED, 
                     "Error while creating product");

当你抓住它时,你可以根据代码进行区分。

catch (ProduktException ex) {
    if (ex.getExceptionCode().equals(Code.PRODUCT_NOT_CREATED)) {
        ...
    }
    else {
        ...
    }
}