查看 Java 的 API 可以发现 Exception 并没有定义任何方法。它从 Throwable 继承了一些方法,所以创建自定义的异常类时可以继承 Throwable 中的方法。Throwable 主要的方法有以下几种:
-
public Throwable fillInStackTrace():返回包含一个完全堆栈追踪的 Throwable 对象,这个对象可以被再次抛出。
-
public Throwable getCause():返回此 throwable 的 cause。如果 cause 不存在或未知,则返回 null。
-
public String getMessage():返回此 throwable 的详细消息字符串。
-
public StackTraceElement[]getStackTrace():返回一个包含异常堆栈追踪的数组,每个元素表示一个堆栈帧。数组的第零个元素(假定数据的长度为非零)表示堆栈顶部,它是序列中最后的方法调用。通常,这是创建和抛出该 throwable 的地方。数组的最后元素(假定数据的长度为非零)表示堆栈底部,它是序列中第一个方法调用。
-
public void printStackTrace():将异常堆栈追踪输出到标准错误流。
-
public void printStackTrace(PrintStream s):将此 throwable 及其追踪输出到指定的输出流。
-
public void printStackTrace(PrintWriter s):将此 throwable 及其追踪输出到指定的PrintWriter。
-
public String toString():返回一个包含异常描述的 String 对象。
public class MyException extends Exception{
MyException()
{
}
MyException(String msg)
{
//调用父类的方法
super(msg);
}
}
public class TestMyException{
public static void main(String args[ ]){
//创建自己的异常类对象
MyException mec=new MyException("这是我自定义的异常类");
System.out.println(mec.getMessage());
System.out.println(mec.toString());
}
}
程序的运行结果如下:
这是我自定义的异常类
MyException: 这是我自定义的异常类
class IllegalScoreException extends Exception{
IllegalScoreException(){
}
IllegalScoreException(String msg){
//调用父类的构造方法
super(msg);
}
}
public class Score{
public static void main(String args[]){
try{
String level=null;
level=scoreLevel(90);
System.out.println("90 分的成绩等级为:"+level);
level=scoreLevel(120);
System.out.println("120 分的成绩等级为:"+level);
}
catch(IllegalScoreException e){
e.printStackTrace();
}
}
static String scoreLevel(int score) throws IllegalScoreException{
if(score>=85&&score<=100)
return "A";
else if(score>=75&&score<85)
return "B";
else if(score>=60&&score<75)
return "C";
else if(score<60&&score>=0)
return "D";
else
throw new IllegalScoreException("非法的分数");
}
}
程序的运行结果如下:
90 分的成绩等级为:A
IllegalScoreException: 非法的分数
at Score.scoreLevel(Score.java:38)
at Score.main(Score.java:19)