自定义异常好处:
1.快速知晓异常原因
2.满足特定的业务需求
....
自定义异常毛病:增加了一些开发成本和工作量,项目没必要的话,也不一定非得要用上自定义异常。
自定义异常使用:
在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
可以像下面这样定义自己的异常类:
class MyException extends Exception{ }
让我们看一下实例demo吧
----华丽的分割线 java版
----如果控制台输入数字1,抛出自定义的异常:自定义异常
//自定义异常类继承了Exception(利用重写父类toString()方法)
public class 自定义异常 extends Exception {
@Override
public String toString() {
return "自定义异常!!!!";
}
}
//test类进行测试
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
try {
if(n==1){
throw new 自定义异常();
}
} catch (自定义异常 e) {
System.out.println(e);
// TODO: handle exception
}
}
}
---如果Users的uSex!=1 && uSex ! = 2时,抛出自定义的异常:SexException
--首先Users实体类代码如下:
package cn.ExceptionDemo;
public class Users {
private Integer uSex;
public Integer getuSex() {
return uSex;
}
public void setuSex(Integer uSex) throws Exception{
if(uSex != 1 && uSex !=2){
throw new SexException("性别模糊,无法辨认!");
}else{
this.uSex = uSex;
}
}
}
--自定义异常类:SexException类(利用构造方法构建)
package cn.ExceptionDemo;
public class SexException extends RuntimeException {
public SexException(String msg){
super(msg);
}
}
--测试类
package cn.ExceptionDemo;
public class TSexException {
public static void main(String[] args) {
Users u = new Users();
try {
u.setuSex(3);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(u.getuSex());
}
}
----华丽的分割线 我们再来看一看python版
#控制台输入1报Aex异常,2报Bex,3报Cex
class Aex(Exception):
def __str__(self):
return "aex!"
class Bex(Exception):
def __str__(self):
return "bex!"
class Cex(Exception):
def __str__(self):
return "cex!"
num=int(input("请输入一个数字:"))
try:
if num ==1 :
raise Aex
if num ==2:
raise Bex
if num ==3:
raise Cex
print("ok!")
except (Aex,Bex,Cex)as e :
print(e)
通过上面的对比我们可以看到java与python版并无太大的区别,这里python的except就是java中的catch