运行时异常和非运行时异常例子:
我写一个类如下:
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();
}
}