如何在JAVA中的Exception上设置消息?

时间:2012-01-17 13:05:49

标签: java exception

我想设置自定义异常消息但是我不确定如何执行此操作。我是否需要创建自定义异常类,或者是否有更简单的方法来执行此操作?

如果这是一个简单的问题,请提前抱歉,但我一直在网上搜索并且运气不佳。

7 个答案:

答案 0 :(得分:26)

大多数标准异常类都提供了一个带消息的构造函数,例如:

public UnsupportedOperationException(String message) {
    super(message);
}

上面的类只是调用其父的构造函数,该构造函数调用其父构造函数,依此类推,最终达到:

public Throwable(String message) {
    ...
}

如果您创建自己的异常类,我认为遵循此约定是个好主意。

答案 1 :(得分:11)

好吧,如果API提供了一个适合您需求的异常(例如IllegalArgumentException),只需使用它并在构造函数中传递消息。

答案 2 :(得分:10)

您只能在创建例外时设置消息。如果您想在创建后设置它,这是一个示例。

public class BusinessException extends RuntimeException{

    private Collection<String> messages;

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


    public BusinessException(String msg, Exception cause){
        super(msg, cause);
    }


    public BusinessException(Collection<String> messages){
        super();
        this.messages= messages;
    }


    public BusinessException (Collection<String> messages, Exception cause){
        super(cause);
        this.messages= messages;
    }

    @Override
    public String getMessage(){
        String msg;

        if(this.messages!=null && !this.messages.isEmpty()){
            msg="[";

            for(String message : this.messages){
                msg+=message+",";
            }

            msg= StringUtils.removeEnd(msg, ",")+"]";

        }else msg= super.getMessage();

        return msg;
    }

}

答案 3 :(得分:2)

最好的方法是包装异常。

try {
    my code that throws E;
} catch (final E e) {
    throw new MyE("my message", e);
}

答案 4 :(得分:2)

Exception类接受String自定义消息,并且(据我所知)所有派生类。

所以:不,你不需要创建自定义类。现有的例外情况之一可能包括您的情况(阅读他们的描述以找出哪些)。如果这些都不是真的令人满意,那么您可以创建Exception(或RuntimeException等)的扩展名并维护自定义消息构造函数。

答案 5 :(得分:1)

Exception类(其父级,实际上是Throwable)在其构造函数中将消息作为参数

抛出新的异常(“message”)/ Exception(“message”,innerException);

答案 6 :(得分:0)

试试此代码

        try{
             throw new Exception("Bad String");
        }catch(Exception ex){
             System.out.println(ex.getMessage());
        }