要自定义异常,必须继承基类Exception。下面是个简单的例子:
{
public void f() throws SimpleException{
System.out.println("Throw SimpleException from f()");
throw new SimpleException();
}
public static void main(String[] args){
SimpleExceptionDemo sed = new SimpleExceptionDemo();
try
{
sed.f()
}
catch (SimpleException e)
{
System.out.println("Caught it!");
}
}
};
"Throw SimpleException from f()",
"Caught i t!"
自定义异常和java自带的异常没什么区别,可以在异常里重写一些方法,下面还有一个程序。
另外想说明一点的就是一些异常类的区别,它们都是从基类Throwable继承的方法。
String getMessage()
String geLocalizedMessage()
用来获取详细信息,或用来本地语言表示的详细信息。
String toString()
返回对Throwable的简单描述,要是有详细信息的话,也会把它包含内。
void printStackTrace()
void printStackTrace(PrintStream)
void printStackTrace(java.io.PrintWriter)
打印Throwable和Throwable的调用本轨迹。
Throwable fillInStackTrace()
用于在Throwable对象的内部记录本帧的当前状态。
下面有一个程序,刚看的时候觉得有点奇怪,也是从《Think in java》里摘的。
{
private int x;
public MyException2() {}
public MyException2(String msg) {super(msg);}
public MyException2(String msg,int x){
super(msg);
this.x = x;
}
public int val() {return x;}
public String getMessage(){
return "Detail Message:"+x+" "+super.getMessage();
}
};
public class ExtraFeatures
{
public static void f() throws MyException2{
System.out.println("Throwing MyException2 from f()");
throw new MyException2();
}
public static void g() throws MyException2{
System.out.println("Throwing MyException2 from g()");
throw new MyException2("Originated in g()");
}
public static void h() throws MyException2{
System.out.println("Throwing MyException2 from h()");
throw new MyException2("Originated in h()",47);
}
public static void main(String[] args){
try
{
f();
}
catch (MyException2 e)
{
e.printStackTrace();
}
try
{
g();
}
catch (MyException2 e)
{
e.printStackTrace();
}
try
{
h();
}
catch (MyException2 e)
{
e.printStackTrace();
System.out.println("e.val()=" + e.val());
}
}
在这里我要说明的是printStackTrace(),toString(),getMessage()三者的区别,要不然怎么会有如上的结果呢?
(转)说明得很清楚,一定要仔细地看哈!
printStackTrace()、toString()、getMessage()的区别
-
public void printStackTrace()
将此 throwable 及其追踪输出至标准错误流。
此方法将此 Throwable或Exception 对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
输出的第一行包含此对象的 toString() 方法的结果。剩余行表示以前由方法 fillInStackTrace() 记录的数据。
输出格式举例:java.lang.NullPointerException
at MyClass.mash(MyClass.java:9)
at MyClass.crunch(MyClass.java:6)
at MyClass.main(MyClass.java:3)
使用举例:try{
//Java程序代码
}
catch(Exception e){
e.printStackTrace();
}
-
public String getMessage()
返回此 Throwable或Exception 的详细消息字符串。
使用举例:
public String toString()try{
//java程序代码
}
catch(Exception e){
System.out.println();
}
返回此 Throwable或Exception 的简短描述。
如果此 Throwable或Exception 对象是利用非空详细消息字符串创建的,则结果是三个字符串的串联:
1)此对象的实际类的名称
2)": "(冒号和空格)
3)此对象的 getMessage() 方法的结果
如果此 Throwable或Exception 对象利用 null 详细消息字符串创建,则返回此对象的实际类的名称。 使用举例:try{
//Java程序代码
}
catch(Exception e){
System.err.println(e.toString());
}
今天java的异常就先写到这儿吧,明天继续!!!