代码如下:
public class Demo6 {
public static void main(String[] args){
System.out.println(firstNum("5x"));
System.out.println(firstNum(""));
System.out.println(firstNum("X"));
System.out.println(firstNum(null));
}
public static int firstNum(String str) {

try{
char c = str.charAt(0);
if(c<'0' || c>'9'){
throw new RuntimeException("the first if not digit");
}
return str.charAt(0) - '0';
}catch(NullPointerException e){
e.printStackTrace();
return -1;
}catch(StringIndexOutOfBoundsException e){
e.printStackTrace();
return -2;
}catch(Exception e){
e.printStackTrace();//打印方法的调用栈跟踪
return -3;
}finally{//无论是否有异常,总是被执行的代码
return -4;
}
}
}每次执行到空指针那里,就不再运了了。空指针异常

解决方案 »

  1.   

    为啥要return -1,-2,-3,-4
      

  2.   

    请自己看一下finally的作用是什么
    你可以这样改应该就是你要的结果了
    int result=-4;
    try{
    char c = str.charAt(0);
    if(c<'0' || c>'9'){
    throw new RuntimeException("the first if not digit");
    }
    return str.charAt(0) - '0';
    }catch(NullPointerException e){
    e.printStackTrace();
    result = -1;
    }catch(StringIndexOutOfBoundsException e){
    e.printStackTrace();
    result = -2;
    }catch(Exception e){
    e.printStackTrace();//打印方法的调用栈跟踪
    result = -3;
    }finally{//无论是否有异常,总是被执行的代码
    return result;
    }
      

  3.   

    因为我现在正在学习java,这个程序只是一个例子,用来学习异常处理和fianlly语句的。只是,别的都可以,就是那个空指针异常,不能正常工作
      

  4.   

    我把你的代码复制运行了一下发现没问题啊
    下面是结果:
    java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:687)
    at Demo6.firstNum(Demo6.java:12)
    at Demo6.main(Demo6.java:4)
    java.lang.RuntimeException: the first if not digit
    at Demo6.firstNum(Demo6.java:14)
    at Demo6.main(Demo6.java:5)
    java.lang.NullPointerException
    at Demo6.firstNum(Demo6.java:12)
    at Demo6.main(Demo6.java:6)
    -4
    -4
    -4
    -4
      

  5.   


    这位仁兄LZ的代码测试意图应该是没错的。
    因为finally中的内容会抢在return之前运行。而finally中恰好有个return
    由于finally中抢先return了,这样相当于try catch中的return都无效了。
      

  6.   


    这位仁兄LZ的代码测试意图应该是没错的。
    因为finally中的内容会抢在return之前运行。而finally中恰好有个return
    由于finally中抢先return了,这样相当于try catch中的return都无效了。嗯,有道理
      

  7.   

    当引用为空的时候char c = str.charAt(0);
    这个地方的str就不能调用其中的函数了。
    因为charAt()这个函数是类中飞静态函数,它只能用类的实例来调用。哪怕你上面写的str=“”它也是有实例的所以可以用,而str=null时没有实例就不能调用了