jing547789635 2011-09-27 16:43
浏览 194
已采纳

Java try/catch 异常处理的问题

public static void main(String[] args) {
        System.out.println(test(null)+","+test("")+","+test("1"));
    }

    @SuppressWarnings("finally")
    private static int test(String str) {
        try{
            return str.charAt(0)-'0';
        }catch(NullPointerException e){
            e.printStackTrace();
            return 1;
        }catch(RuntimeException e){
            e.printStackTrace();
            return 2;
        }catch(Exception e){
            e.printStackTrace();
            return 3;
        }finally{//finally  永远被执行
            return 4;
        }
            
    }

求输出结果及解释,本人菜鸟,见笑了!

 

  • 写回答

5条回答 默认 最新

  • DreamZhong 2011-09-27 16:52
    关注

    java.lang.NullPointerException
    at com.dream.model.ExceptionTest.test(ExceptionTest.java:17)
    at com.dream.model.ExceptionTest.main(ExceptionTest.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
    java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:695)
    at com.dream.model.ExceptionTest.test(ExceptionTest.java:17)
    at com.dream.model.ExceptionTest.main(ExceptionTest.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
    4,4,4

    第一个方法调用会报NullPointerException
    第二个方法调用会报StringIndexOutOfBoundsException
    第三个方法运行正常

    因为有finally块,所以不论前面的运行结果是什么,都会返回4,所以会看到4,4,4这样的输出结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥20 安装 opencv4nodejs 报错
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!