自定义异常 重写父类的toString() 不能抛异常 请帮忙,谢谢

zyxnlbh 2008-04-28 08:26:20
package ThrowsExceptionTest;
public class A{

private String name;

public void setName(String name){
this.name = name;
}

public String getName() throws MyException{
if(name==null||name==""){
throw new MyException("名字不能为空");
}
return this.name;
}

public String toString() throws MyException{
String s;
s = this.getName();
return s;
}

void ExceptionTwo(){
throw new NullPointerException("123");
}
public A() {
// TODO Auto-generated constructor stub
}

/**
* @param args
* @throws MyException
*/
public static void main(String[] args) throws MyException {
A a = new A();
a.setName(null);
try{
System.out.println(a.getName());
}catch(NullPointerException e){
throw e;
}finally{
System.out.println("finally@@@");
}
a.ExceptionTwo();
}

}

class MyException extends Exception{
public MyException(String message){
super(message);
}
}
...全文
361 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiege_wcj 2008-05-04
  • 打赏
  • 举报
回复
子类不能抛出比父类多的新异常,
本身的java.lang.Object.toString()就不会抛出异常,所以重写也不会抛出异常
详细信息如下:
toString
public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

返回:
该对象的字符串表示形式。
tdy1234 2008-04-29
  • 打赏
  • 举报
回复
本身tostring函数不带异常抛出 你重写当然不会抛呀
ccbianshen 2008-04-29
  • 打赏
  • 举报
回复
java.lang.object下面的
public String toString()
没有任何抛出异常
所以你一个异常也不能抛
胡矣 2008-04-29
  • 打赏
  • 举报
回复
说的挺好
Shine_Panda 2008-04-29
  • 打赏
  • 举报
回复
方法重写满足的条件:
1, 要有继承.
2, 相同的方法名.
3, 相同的参数列表.
4, 子类不能比父类抛出更多的异常.

你的情况就是不满足上面的第4条.
aipb2008 2008-04-29
  • 打赏
  • 举报
回复
一句话:小于等于基类方法的异常抛出范围。
anqini 2008-04-28
  • 打赏
  • 举报
回复
Object toString()方法没有抛异常,因为你是重写它,所以不能抛,简单来说,你只能抛父类方法抛出的异常的本身或者它的继承异常!假如父类方法没有抛,你就不能抛!
我是风 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bruni 的回复:]
1. 去看看overwrite的概念. Object.toString是没有throws Exception, 你当然不能在overwrite时抛出异常.
2. 非要抛出异常的话, 改个名字好了, myToString()...
[/Quote]
jiazhengjing 2008-04-28
  • 打赏
  • 举报
回复
在子类中一个重写的方法只可能抛出父类中声明过的异常或者异常的子类,
Object类的toString方法没有抛出异常所以,子类重写toString时不能抛出异常。
bruni 2008-04-28
  • 打赏
  • 举报
回复
1. 去看看overwrite的概念. Object.toString是没有throws Exception, 你当然不能在overwrite时抛出异常.
2. 非要抛出异常的话, 改个名字好了, myToString()...


62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧