那是因为你string是空的,没有实例化,在你使用时这个串时,对串抛出的异常,和函数没关系!

解决方案 »

  1.   

    那么我如何区分象length()这样的函数和那些肯定不会抛出异常的函数?
    比如,给你一个函数public void xxx()没明确说明会抛出异常,那我怎么判断?
    每个都加try显得程序不够精炼,加一个大范围的try又不能够精确控制程序流程,难,实在难!
      

  2.   

    你学Java多久了?
    看看java语言规范吧,专门有一章是讲异常的。
      

  3.   

    java抛出异常,是由他规律的,就你提的问题简单来说是,如果你调用的函数在声明的时候声明了抛出的异常,那么调用他的函数就必须要显示的捕捉或者继续抛出这个异常,相反则可以放弃;程序在执行过程用会有运行异常或错误,这种异常是不强迫捕捉的。但如果出现错误,一样会抛出异常。具体内容可以看一下thinking in java中的相关内容。
      

  4.   

    RuntimeException不用声明也会在运行时产生了的话抛出;没有生命你要抛出异常也可以的。throws是说明你需要别人处理可能的异常,不说明就是你不声明要别人处理(但可以抛出)。
      

  5.   

    我是想有这种效果:
    void x()
    {
        y();//不能确定一定抛出异常
        z();//不能确定一定抛出异常
        m();//不能确定一定抛出异常
        n();//不能确定一定抛出异常
        p();//不能确定一定抛出异常
    }
    假如上面有很多地方有可能抛出异常(有10个不算多吧),但不管每个地方有没有异常(有异常的话也不严重影响程序运行,如果不catch,程序岂不跑乱了),都按顺序执行,如何做?只有每个有可能出现异常的地方都加try、catch吗?
      

  6.   

    老大,这样试试:
    void x()
    {
      try {
        y();//不能确定一定抛出异常
        z();//不能确定一定抛出异常
        m();//不能确定一定抛出异常
        n();//不能确定一定抛出异常
        p();//不能确定一定抛出异常
      } catch (Throwable t) {
        t.printStackTrace();
        //...
      }
    }
    有异常的话,可从堆栈跟踪里清楚地看到是y,z,m...的那个出了错
      

  7.   

    java.lang.Object
      |
      +-java.lang.Throwable
            |
            +-java.lang.Exception(一定要catch或者throws)
                  |
                  +-java.lang.RuntimeException(JVM会自己处理,当然也可以自己处理)
      

  8.   

    除了java.lang.RuntimeException会偶尔冒出来之外,所有的异常都有说明,不会出现凭空出异常的情况,楼主的问题是由于变量为null引起的与函数无关,可以说都没有走到函数处就异常了
      

  9.   

    楼主是不是以前是VC或者VB高手啊?可能对于错误处理还是那么的津津乐道,在java里你可以省很多事了。用不这么费神的。
      

  10.   

    up
    我可不那样认为,我认为一个好的程序是可以在违例中写流程控制的,在违例中写流程控制不但不是不好,而且是非常好,我以前做过的一个项目就有在catch{}里写出的流程.楼上的很多位大侠说的都很好.可以学习学习.