首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Exception >

运行时异常和非运行时异常例子

2014-01-26 
运行时异常和非运行时异常例子:我写一个类如下:import java.io.*public abstract class MyLayer{...void s

  运行时异常和非运行时异常例子:

  我写一个类如下:
  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();
  }
  }   
 

        

热点排行