java中异常的完整路径

时间:2015-10-18 23:52:01

标签: java exception-handling

我正在尝试抛出自定义异常

class NumberFormatException extends Exception
{
  public NumberFormatException() {}

  //Constructor that accepts a message
  public NumberFormatException(String message)
  {
    super(message);

  }
}

稍后,我使用

抛出此异常
 throw new NumberFormatException("Exception found");

以后再使用

捕获它
catch(NumberFormatException e)
{
    System.out.println(e);
}

打印类似

的内容
NumberFormatException: Exception found

是否可以打印如下内容:

java.lang.NumberFormatException: Exception found

约束是catch代码无法修改,即

catch(NumberFormatException e)
   {
     System.out.println(e);
   }

2 个答案:

答案 0 :(得分:0)

您正在尝试获取异常类的规范名称,以下是获取它的方法:

catch(NumberFormatException e)
{
    System.out.println(e.getClass().getCanonicalName());
}

请参阅javadoc了解更多信息:getCanonicalName

答案 1 :(得分:0)

在您的toString课程中覆盖NumberFormatException

class MyException extends Exception{
    String message;

    public MyException(String string) {
        this.message = string;
    }

    @Override
    public String toString() {
        String s = getClass().getCanonicalName();
        String message = this.message;
        return (message != null) ? (s + ": " + message) : s;
    }
}

来源:Throwable

以下是测试该方法的完整代码:

package first;

class MyException extends Exception{
    String message;

    public MyException(String string) {
        this.message = string;
    }

    @Override
    public String toString() {
        String s = getClass().getCanonicalName();
        String message = this.message;
        return (message != null) ? (s + ": " + message) : s;
    }
}

public class TestingMyException{
    public static void main(String[] args) {
        try{
            throw new MyException("This works !");
        }catch(MyException e){
            System.out.println(e);
        }
    }
}

<强>输出

first.MyException: This works !

由于我的类是在我的root名为first的包中定义的,因此结果会打印first.MyException

因此,您还必须检查您的课程是否未在 默认包 中定义。否则,你除了:

之外什么也得不到
MyException: This works !