50分求助,编译器为什么对这一小段练习程序提示这样的错误?

coco123 2003-08-22 01:35:12
源程序如下:
//目的是想在赋值时若日期过大则抛出异常
//MyDateException 是自定义的异常类
class MyDateException extends Exception{
private String reason;
public MyDateException(String r){
reason=r;
}

public String getReason(){
return (reason);
}
}



class MyDate{
int year,month,day;
void setDate(int y,int m,int d){
if(d>31) {
throw new MyDateException("day too big");//抛出异常
}
year=y;
month=m;
day=d;
}
}


class TestDate{
public static void main(String args[]){
MyDate t=new MyDate();
try{
t.setDate(2003,8,33);
}
catch(MyDateException ee){
System.out.println(ee.getReason());
}
}
}

//编译器提示错误如下;
unreported exception MyDateException; must be caught or declared to be thrown
throw new MyDateException("day too big");


...全文
37 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jkit 2003-08-22
  • 打赏
  • 举报
回复
void setDate(int y,int m,int d) throws MyDateException {
即可, 没必要像楼上抛出Exception 。

另外,需要抛出该异常的情况很多,
月份 1 - 12 合法, 其他抛出该异常
1,3,5,7,8,10,12 月时 日期 1 - 31 合法, 其他抛出该异常
4,6,9,11 月时, 日期 1 - 30 合法, 其他抛出该异常
2月时, 平年 日期 1 - 28 合法, 其他抛出该异常
闰年 日期 1 - 29 合法, 其他抛出该异常
zhousm6 2003-08-22
  • 打赏
  • 举报
回复
void setDate(int y,int m,int d) throws MyDateException, Exception{
if(d>31) {
throw new MyDateException("day too big");//抛出异常
}
year=y;
month=m;
day=d;
}
fita 2003-08-22
  • 打赏
  • 举报
回复
在函数内有抛出异常时,应在函数申明时用throws语句申明,使调用者知道你的函数会抛出什么异常,并在调用时进行捕捉。
将setDate的申明改为以下就可以了:

void setDate(int y,int m,int d)
throws MyDateException
{


62,614

社区成员

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

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