黑马程序员技术交流社区
标题:
自定义异常的toString函数调用问题
[打印本页]
作者:
daoyua
时间:
2013-12-31 16:56
标题:
自定义异常的toString函数调用问题
本帖最后由 daoyua 于 2013-12-31 21:13 编辑
class DemoException extends Exception
{
DemoException(String msg){
super(msg);
}
}
class Demo
{
int div(int a,int b) throws DemoException //这里抛出异常是为了调用的时候注意,如果不用呢
{
if(b<0)
throw new DemoException("除数为负的异常");
return a/b;
}
}
class Test
{
public static void main(String args[]){
try{
Demo d=new Demo();
int i=d.div(3,-1);
System.out.println("无异常");
}
catch(DemoException e)
{
System.out.println("异常");
System.out.println(e.toString()); //我主要问为什么toString()怎么知道打出MESG的内容
//e.printStackTrace();
}
}
}
作者:
doitforyou
时间:
2013-12-31 19:28
^_^,这个问题我也遇到过,异常都会继承一个Throwable类的,你在自定义异常的时候使用了
super(msg),父类也被初始化了,同时你继承的还有父类的方法:
这是Throwable源码中的toString方法,message就是你传入的msg.
public String toString() {
String s = getClass().getName();
String message = getLocalizedMessage();
return (message != null) ? (s + ": " + message) : s;
}
当你调用toString的时候你调用的是继承的toString,所以就会打印这些消息了。
权威性我不保证,这是我自己琢磨的。你参考下吧
作者:
悠然的我
时间:
2013-12-31 19:33
以下叙述摘自JDK1.6API文档,应该说的很清楚了吧
public String toString()
返回此 throwable 的简短描述。结果是以下字符串的串联:
此对象的类的 name
": "(冒号和一个空格)
调用此对象 getLocalizedMessage() 方法的结果
如果 getLocalizedMessage 返回 null,则只返回类名称。
你自定义异常
getLocalizedMessage
public String getLocalizedMessage()创建此 throwable 的本地化描述。子类可以重写此方法,以便生成特定于语言环境的消息。对于不重写此方法的子类,默认实现返回与 getMessage() 相同的结果。
返回:
此 throwable 的本地化描述。
getMessage
public String getMessage()返回此 throwable 的详细消息字符串。
引用API文档结束。
少年,普通异常是可以处理的,你要是不抛,说明它只有Runtime异常呗,除数都负数了,编译器就帮你处理了。你在错误发生前就抛了异常,它就可处理了呗。
作者:
daoyua
时间:
2013-12-31 21:11
懂了,你们讲的真好
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2