在java中创建自定义异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java中创建自定义异常相关的知识,希望对你有一定的参考价值。
在一次采访中,我最近被问到以下问题:
有没有其他方法创建自定义Exception
而不使用extends
:
- 扩展
Exception
类或Exception
子类用于检查异常 - 扩展
RuntimeException
或RuntimeException
子类用于未经检查的例外。
给出的可能答案是什么?
答案
如果不使用扩展异常类,就无法做到这一点。但是你可以在没有明确扩展的情况下实现它。
public class Test {
public void method() {
throw new RuntimeException() {};
}
}
上面声明并抛出了RuntimeException
的匿名子类。
当然,这是毫无意义的事情。由于该类是匿名的,因此您无法在throws
子句中对其进行命名,也不能在异常处理程序中按名称处理它。
另见:Throw anonymous exceptions in Java
或者,您可以扩展Error
,Error
的子类或.... Throwable
。但你不应该。
- 通常假设
Error
异常由JVM或标准库1定义和抛出。因此,Error
层次结构中的自定义子类(至少可以说)令人惊讶。 - 如果你直接扩展
Throwable
,那么你应该承担断代码,假设Exception
和Error
是Throwable
的唯一子类。
1 - 这不是javadoc所说的......但是人们认为是这样的。
另一答案
可以扩展Throwable类。
另一答案
因为OP专门要求不使用extends(我认为你不能扩展像Throwable这样的类)你可以使用Exception
和参数如:
throw new Exception("this is my custom exception");
现在无论你在哪里捕获此异常,都可以查看消息
if(e.getMessage().equals("this is my custom exception")){
//TODO code here
}
现在我会解雇那些会编写代码的人,但是为了采访的缘故哦...
另一答案
您可以扩展Throwable
但不建议这样做。
另一答案
那么你可以导入一个异常而不是扩展它。只需导入包并在自定义异常中使用它。
以上是关于在java中创建自定义异常的主要内容,如果未能解决你的问题,请参考以下文章