Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中EmptyStackException的自定义错误消息?_Java - Fatal编程技术网

Java中EmptyStackException的自定义错误消息?

Java中EmptyStackException的自定义错误消息?,java,Java,我正在用Java实现堆栈。对于pop操作,我想抛出EmptyStackException。根据该函数,EmptyStackException有一个构造函数,EmptyStackException()。它- 构造一个新的EmptyStackException,其错误消息字符串为null 因此它不能将我的自定义错误消息作为参数。我需要设置自定义错误消息,因为它的错误消息为null,getMessage()返回null。如果我使用此异常,我必须在捕获EmptyStackException的地方对错误消

我正在用Java实现堆栈。对于
pop
操作,我想抛出
EmptyStackException
。根据该函数,
EmptyStackException
有一个构造函数,
EmptyStackException()
。它-

构造一个新的EmptyStackException,其错误消息字符串为null

因此它不能将我的自定义错误消息作为参数。我需要设置自定义错误消息,因为它的错误消息为null,getMessage()返回null。如果我使用此异常,我必须在捕获
EmptyStackException
的地方对错误消息进行硬编码

public int pop() {
    if (empty())
        throw new EmptyStackException(); // cannot take error message as argument
    int data = top.getData();
    top = top.getNext();
    return data;
}
public static void main(String[] args) {
    Stack stack = new Stack();
    try {
        System.out.println(stack.pop());
    } catch (EmptyStackException e) {
        System.out.println("Stack is empty");  // my hardcoded message
}
另一种方法是使用
Exception
而不是
EmptyStackException
。它有一个构造函数:
异常(字符串消息)
。使用此选项,我可以设置自定义消息

public int pop() throws Exception {
    if (empty())
        throw new Exception("Stack is empty"); // take message as argument
    int data = top.getData();
    top = top.getNext();
    return data;
}
public static void main(String[] args) {
    Stack stack = new Stack();
    try {
        System.out.println(stack.pop());
    } catch (Exception e) {
        System.out.println(e.getMessage()); //print message set from the throwing position
}

我的问题是,哪种方式是最佳实践,或者还有其他方式吗?

EmptyStackException
类是自我解释的。不要认为需要任何额外的信息。我会保持原样:)。如果您仍然需要消息,那么创建自定义异常类是广泛使用的方法。

创建您自己的自定义异常,如下所示:

public class EmptyParameterException extends Exception {

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

}

您还可以扩展
EmptyStackException
并编写接收消息的构造函数,以及返回字符串的
getMessage
。为什么需要自定义消息?只有一件事
EmptyStackException
可能意味着..它的父类是RuntimeException,它有一个支持字符串的cstr。您是否尝试过使用自定义消息?我从来没有试过,因为我觉得它已经不言自明了。我认为记录自定义消息就足够了。@SocraticPhoenix因为
EmptyStackException
意味着一件事,所以打印自定义消息可以吗?我正在尝试知道哪种是最佳做法。我想在捕获异常后打印错误消息。但是
EmptyStackException
没有错误消息,我只能打印null。所以我在catch块硬编码消息。这是最佳实践吗?如果显式捕获EmptyStackException,例如
尝试{/**/}catch(EmptyStackException e){this.log.error(“堆栈为空”);}