站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题关于异常的疑惑

关于异常的疑惑

摘要: 关于异常的疑惑


我写一个类如下:
import java.io.*;
public abstract class MyLayer
{
...
void someFun()
{
if(condtion)
{
throw new IllegalArgumentException();在这里,我如果抛出 IOException 就出错了
}
}
...

}

如上,我如果抛出 IllegalArgumentException 异常,是 OK 的,可是如果抛出 IOException ,就报错说 “unhandled exception type IOException”,这时,需要在类名后加上
public abstract class throws IOException 才能改正这个错误

我疑惑的是,为什么 IllegalArgumentException 可以直接抛出,而不需要在类名后声明抛出的异常呢

如果一个class 写成这样
public class ClassA
后面不声明异常,是不是表示该类不抛异常,如果在改类的方法中想抛出异常,编译就会报错
可是如果是这样的话,我开始这段代码又怎么会对呢
不解



IllegalArgumentException是运行期异常,是RunntimeException的子类,没有强制要求catch,但是IOException是受控异常,必须在程序里边显式的catch或者throw


IllegalArgumentException 是运行时异常,不需要在使用的地方加声明;IOException是编译时异常,需要在使用的地方加上声明。但楼主的做法有误,你这样:
void someFun() throws IOException
{
if(condtion)
{
throw new IOException();
}
}

就OK了


IllegalArgumentException 是一个运行时异常,继承自RuntimeException
RuntimeException这种异常在程序正常运行时时不会发生的,因此这类异常不需要在程序中捕获
NullPointerException也属于这种异常
IOException 是非运行时异常,这类异常需要在程序中捕获
如果不捕获则需要将异常抛出,交给程序的上一层处理
我通常是这样写在方法名的后面,表示这个方法会抛出这个异常
void someFun() throws IOException
{
if(condtion)
{
throw new IOException();
}
}
说得不好,大家批评


谢谢大家 :)


↑返回目录
前一篇: WTK从服务器上获取的中文是乱码
后一篇: 我开发的msn手机客户端(MIDP2.0),大家帮忙测试一下