- Java类
- Java包
- Java方法
- Java访问
- Java创建
- Java对象(Object)
- Java内部类
- Java继承
- Java抽象类
- Java泛型类
- Java异常
- Java接口
- Java枚举
- Java注解
Java自定义异常
我们可以创建自己(自定义)的异常类。它们必须扩展现有的异常类。
<Class Modifiers> class <Class Name> extends <Exception Class Name> { }
<Class Name>
是异常类名。在接下来的示例中,将创建一个MyException
类,它扩展了java.lang.Exception
类。
语法
自定义一个异常类的语法如下:
public class MyException extends Exception { }
异常类与Java中的任何其他类一样。 通常不向异常类中添加任何方法。许多可用于查询异常对象状态的有用方法已经在Throwable
类中声明了。
自定义异常类构造函数
通常,异常类包括四个构造函数。所有构造函数将使用super
关键字调用其超类的相应构造函数。
class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } public MyException(String message, Throwable cause) { super(message, cause); } public MyException(Throwable cause) { super(cause); } }
第一个构造函数创建一个具有null
的异常作为其详细消息。
第二个构造函数创建一个具有详细消息的异常。
第三和第四个构造函数允许通过包装/不包含详细消息的另一个异常来创建异常。
自定义异常类之后,就可以抛出MyException
类型的异常。
throw new MyException("Your message goes here");
可以在方法/构造函数声明中的throws
子句中使用MyException
类,或者在catch
块中使用参数类型。
public void m1() throws MyException { }
或捕获异常类
try { }catch(MyException e) { }
Throwable类
下面的列表显示了Throwable
类的一些常用方法。Throwable
类是Java中所有异常类的超类。此表中显示的所有方法在所有异常类中都可用。
方法 | 方法描述 |
---|---|
Throwable getCause() | 返回异常的原因。如果未设置异常的原因,则返回null 。 |
String getMessage() | 返回异常的详细消息。 |
StackTraceElement[] getStackTrace() | 返回堆栈跟踪元素的数组。 |
Throwable initCause(Throwable cause) | 设置异常的原因。有两种方法可以将异常设置为异常的原因。 其他方法是使用构造函数,它接受原因作为参数。 |
void printStackTrace() | 在标准错误流上打印堆栈跟踪。 |
void printStackTrace(PrintStream s) | 将堆栈跟踪打印到指定的PrintStream 对象。 |
void printStackTrace(PrintWriter s) | 将堆栈跟踪打印到指定的PrintWriter 对象。 |
String toString() | 返回异常对象的简短描述。 |
实例-1
以下代码演示了使用异常类的printStackTrace()
方法。
public class Main { public static void main(String[] args) { try { m1(); } catch (MyException e) { e.printStackTrace(); // Print the stack trace } } public static void m1() throws MyException { m2(); } public static void m2() throws MyException { throw new MyException("有异常或错误发生,鬼知道发生了什么,先抛出来再说!"); } } class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } public MyException(String message, Throwable cause) { super(message, cause); } public MyException(Throwable cause) { super(cause); } }
上面的代码生成以下结果。
实例-2
以下代码显示了如何将异常的堆栈跟踪写入字符串中。
import java.io.PrintWriter; import java.io.StringWriter; public class Main { public static void main(String[] args) { try { m1(); } catch (MyException e) { String str = getStackTrace(e); System.out.println(str); } } public static void m1() throws MyException { m2(); } public static void m2() throws MyException { throw new MyException("有异常或错误发生,鬼知道发生了什么,先抛出来再说!"); } public static String getStackTrace(Throwable e) { StringWriter strWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(strWriter); e.printStackTrace(printWriter); // Get the stack trace as a string String str = strWriter.toString(); return str; } } class MyException extends Exception { public MyException() { super(); } public MyException(String message) { super(message); } public MyException(String message, Throwable cause) { super(message, cause); } public MyException(Throwable cause) { super(cause); } }
上面的代码生成以下结果。
上一篇:Java异常抛出
下一篇:Java finally块
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王