各位大侠,请问runtimeException和非runtimeException的区别,详细些的啊~~我头大了两个星期~

解决方案 »

  1.   

    比如5/0就是runtimeException异常,这样的异常可以在程序里不做处理,不会报错,运行时才会报异常
    非runtimeException异常就是在程序里就要进行try catch的,不进行处理就会报错。。
      

  2.   

    runtimeException 就是在运行期间才有可能产生异常的Exception, 最常见的就是 NullPointerException 啦,
    比如MyClass o = MyFacory.getInstance();
    o.getId();语法上没有任何问题,但是,运行的时候,有个各种原因, MyFacory.getInstance(); 并没有拿到一个MyClass 实例,而是返回了null,
    这样第二句就报错误了如下代码可以检测这类问题。
    MyClass o = MyFacory.getInstance();
    if(o!=null){
      o.getId();
      。。
    }
    。。
    非 runtimeException 就是这类异常是可以预知的,比如
    URL url = new URL("http://www.csdn.net");
    HttpURLConnection con = (HttpURLConnection )url.openConnection();也许你根本不能上网,也许对方网站不存在,这些问题已经预先可以预料,所以,你必须处理 IOException 异常
      

  3.   

    只是就使用而言runtimeException不强制要求做异常处理...下面代码是直接敲出来的,没测试过.....public class ExceptionTest
    {
      private void exceptionTest()
      {
        ETest etX = new ExTest1();
        String strTestString = etX.getTestString();
      }  public static void main(String[] args)
      {
        ExceptionTest et = new ExceptionTest();
        et.exceptionTest();
      }
    }在上面的代码中,exceptionTest()会抛出runtimeException空指针异常,一旦把ExTest1改为ExTest2,则不会出现问题.这个是由第一段代码调用的类.public ETest{}class ETest1 extends ETest
    {
      public String getTestString()
      {
        return null;
      }
    }class ETest2 extends ETest
    {
      public String getTestString()
      {
        return "Hello runtimeException";
      }
    }
    假如ExceptionTest类和3个ETest类不是由一个人写的,那么写ExceptionTest类的人不能确定exceptionTest()方法中是否会出现空指针异常,这就是为什么Java不强制要求处理运行时异常(相对普通异常,运行时异常充满了不确定性,天知道这种异常会在什么时候冒出来)
      

  4.   

    网络里比较统一的说法是:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。一般来说,不抛出运行时异常(RuntimeException)或不创建一个运行时异常(RuntimeException)的子类的原因是不想为指定包含有运行时异常的方法所能抛出的各种不能估计的异常而操心。
    其实Java所有的异常都是在运行时发生的,个人认为runtimeException与普通异常的最大区别正是不确定性太强.
      

  5.   

    这里讲的很详细,点击既可打开http://www.jspcn.net/htmlnews/11049321929371278.html
      

  6.   


    我3楼的例子是错的
    昨天太2了,居然把String用来举空指针异常的例子....
      

  7.   

    简单的说:
    RuntimeException定义的异常产生原因是由于程序编写过程中的不周全的代码引起的.
    比如除数为零,抛出
    java.lang.ArithmeticException;
    越界访问数组,抛出
    java.lang.IndexOutOfBoundsException.
    这些都是可以通过更改程序可以避免的错误.
    即可通过在代码中加入对除数是否为零,数组长度的判断来避免运行错误.(当然也可以使用try-catch捕获异常对其进行处理.如弹出提示框提示用户等.)而将不是由于代码本身引起.或不能全由代码去控制错误的产生,统归为非RuntimeException.
    如,读取一个不存在的或格式错误的URL.你对用户输入的url在程序读取此url前并不能判断其是否是正确的.可以这样说在sun定义的所有异常中RuntimeException将直接的严重的影响我们程序代码的健壮性.
    这也是为什么我们如此关注它的原因.