java中自定义异常

                    java中自定义异常 

自定义异常类。
一、第一种定义方式,继承Exception类
public class MyFirstException extends Exception {
public MyFirstException() {
super();
}
public MyFirstException(String msg) {
super(msg);
}
public MyFirstException(String msg, Throwable cause) {
super(msg, cause);
}
public MyFirstException(Throwable cause) {
super(cause);
}
//自定义异常类的主要作用是区分异常发生的位置,当用户遇到异常时,
//根据异常名就可以知道哪里有异常,根据异常提示信息进行修改。
}

二、 第二种定义方式:继承Throwable 类

public class MySecondException extends Throwable {
public MySecondException() {
super();
}
public MySecondException(String msg) {
super(msg);
}
public MySecondException(String msg, Throwable cause) {
super(msg, cause);
}
public MySecondException(Throwable cause) {
super(cause);
}
}

三、测试
/**
* 自定义异常类的使用
* @author new
*
*/
public class TestMyException {
public static void firstException() throws MyFirstException{
throw new MyFirstException("/"firstException()/" method occurs an exception!");
}

public static void secondException() throws MySecondException{
throw new MySecondException("/"secondException()/" method occurs an exception!");
}
public static void main(String[] args) {
try {
TestMyException.firstException();
TestMyException.secondException();
} catch (MyFirstException e1){
System.out.println("Exception: " + e1.getMessage());
e1.printStackTrace();
} catch (MySecondException e2){
System.out.println("Exception: " + e2.getMessage());
e2.printStackTrace();
}
//当一个try块后面跟着多个catch块时,如果发生的异常匹配第一个catch块的参数,便将异常处理权利交给第一个catch块。
//如果发生的异常与第一个catch块不匹配,便看是否与第二个catch块匹配,依次下去,如果到最后依然无法匹配该异常,
//便需要在方法声明中添加一条throw语句,将该异常抛出。
//因此,在有多个catch块,而且每次处理的异常类型具有继承关系时,应该首先catch子类异常,再catch父类异常。
//比如,如果MySecondException继承MyFirstException,那么最好将catch (MySecondException e2)放在前面,
//把catch (MyFirstException e1)放在后面。
}

Java 中,自定义异常通常通过继承 `Exception` 类或 `RuntimeException` 类来实现。直接继承 `Exception` 类的异常属于检查异常,必须进行相应的处理;而继承 `RuntimeException` 类的异常属于运行时异常,不需要强制处理 [^2]。以下是两种实现方式的具体介绍和示例: ### 继承 `Exception`(编译时异常) 这种方式适用于需要明确告知调用者必须处理的异常情况,常用于表达特定业务逻辑的异常场景。 ```java // 自定义业务异常(编译时异常class BusinessException extends Exception { private String errorCode; public BusinessException(String message, String errorCode) { super(message); this.errorCode = errorCode; } public String getErrorCode() { return errorCode; } } ``` 使用示例: ```java public class TestBusinessException { public static void main(String[] args) { try { throw new BusinessException("业务处理出错", "ERR001"); } catch (BusinessException e) { System.out.println("错误代码: " + e.getErrorCode()); System.out.println("错误信息: " + e.getMessage()); } } } ``` ### 继承 `RuntimeException`(运行时异常) 这种方式适用于不需要强制调用者处理的异常情况,常用于参数校验等场景。 ```java // 自定义参数校验异常(运行时异常class ValidationException extends RuntimeException { private String fieldName; public ValidationException(String fieldName, String message) { super(message); this.fieldName = fieldName; } public String getFieldName() { return fieldName; } } ``` 使用示例: ```java public class TestValidationException { public static void validateInput(int age) { if (age < 0) { throw new ValidationException("age", "年龄不能为负数"); } } public static void main(String[] args) { try { validateInput(-5); } catch (ValidationException e) { System.out.println("错误字段: " + e.getFieldName()); System.out.println("错误信息: " + e.getMessage()); } } } ``` ### 自定义异常类示例 以下是一个简单的自定义运行时异常示例: ```java class MyException extends RuntimeException { public MyException() { } public MyException(String str) { super(str); } } ``` 使用示例: ```java public class Test { public static void test() { java.util.Scanner scanner = new java.util.Scanner(System.in); int age; while (true) { System.out.println("请输入你的年龄"); age = scanner.nextInt(); try { if (age < 0 || age > 100) { throw new MyException("输入年龄错误"); } break; } catch (MyException e) { System.out.println(e.getMessage()); } } System.out.println("成功输入年龄"); } public static void main(String[] args) { test(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值