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;}} 求输出结果及解释,本人菜鸟,见笑了!

解决方案

java.lang.NullPointerExceptionat 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: 0at 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这样的输出结果。
解决方案二:

finally是在其他return之前执行的,报不报错很容易看懂,既然在其他return之前都已经return了,那么值就全是4了。
解决方案三:

@SuppressWarnings("finally") 都有警告了,估计平时也没人会写这样的代码,很是蛋疼!
解决方案四:

对于try/catch/failly的执行过程是不管是否有异常能会执行failly里面的语句,也就是说当try/catch中有return时,failly中的语句会在return之前执行;即在你的程序中会在try/catch中没有return之前,却先执行了failly中的return,当return之后就结束当前域的操作,而try/catch中的return也就不会执行,所以看到的结果都是failly返回的数值
解决方案五:

那方法三test(“1”)没有错应该先return str.charAt(0)-'0';调用结果是1,再执行finally中的4啊,,,为什么不是4,4,14呢???

时间: 2024-11-10 00:27:11

Java try/catch 异常处理的问题的相关文章

continue-关于java里的异常处理

问题描述 关于java里的异常处理 int k,l; do{ k = 0; try{ l = input.nextInt(); }catch(Exception e){ System.out.println("命令输入错误!请根据提示输入数字命令!"); k = 1; continue; } }while(k == 1); 这段代码,只要执行到continue,就不让我再次输入l了,而是死循环,为什么? 解决方案 l = input.nextInt(); 每次都会从输入读取下一个值,而

Java中关于异常处理的10个最佳实践

Java 编程中异常处理的最佳实践 这里是我收集的10个Java编程中进行异常处理的10最佳实践.在Java编程中对于检查异常有褒有贬,强制处理异常是一门语言的功能.在本文中,我们将尽量减少使用检查型异常,同时学会在Java编程中使用检查型VS非检查型异常. 1.为可恢复的错误使用检查型异常,为编程错误使用非检查型错误 选择检查型还是非检查型异常,对于Java编程人员来说,总是让人感到困惑.检查型异常保证你对错误条件提供异常处理代码,这是一种从语言到强制你编写健壮的代码的一种方式,但同时会引入大

Java中的异常处理用法及其架构和使用建议_java

Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性.在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出. Java异常机制用到的几个关键字:try.catch.finally.throw.throws. 关键字 说

全面理解java中的异常处理机制_java

一.java异常总结: 异常就是程序运行时出现不正常运行情况 1.异常由来: 通过java的类的形式对现实事物中问题的描述,并封住成了对象 其实就是java对不正常情况描述后的对象体现 2.对于问题的划分有两种:一种是严重的问题,一种是非严重的问题 对于严重的,java通过Error类来描述 对于Error一般不编写针对性的代码对其进行处理 对于非严重的,java通过Exception类来描述 对于Exception可以使用针对性的处理方式进行处理 3.常见的异常有:数组角标越界异常,空指针异常

Java进阶02 异常处理

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!    程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我们还可以提供一定的应对预案.C语言中的异常处理是简单的通过函数返回值来实现的,但返回值代表的含义往往是由惯例决定的.程序员需要查询大量的资料,才可能找到一个模糊的原因.面向对象语言,比如C++, Jav

前端-java web 全局异常处理 如何配置

问题描述 java web 全局异常处理 如何配置 怎样配置java web 前端在访问该项目中根本不存在的方法的时候 跳转异常页面啊? 解决方案 java web异常处理java web 中几种异常处理Java web的几种异常处理 解决方案二: 看你使用什么技术了.要是ssh框架,直接使用struts2或者spring mvc的拦截器就行,如果是servlet,那就自己写一个拦截器. 解决方案三: 前端访问项目中不存在的方法是什么意思? 页面调用脚本方法不存在的时候浏览器是会执行异常的. 解

java中catch (Exception e){.......}我们都知道Exception是一个类

问题描述 java中catch (Exception e){.......}我们都知道Exception是一个类 java中catch (Exception e){.......}我们都知道Exception是一个类,那e是Exception的一个子类还是Exception的一个对象呢,虽然有java中一切都是对象这种说法,那把e是子类还是对象呢 解决方案 唉 Exception是个类 那e不就是类对象 真是醉了 Exception 的子类都是各种错误 什么空指向异常等等 如果是子类 或者子类对

java try catch处理问题

问题描述 java try catch处理问题 先上代码: public static byte[] toBytes(Object object) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream(byt

javascript try...catch 异常处理详解

网页特效 try...catch 异常处理详解 语法 try{         statement1     }catch(exception){         statement2     } 它可以用来处理全部或一些错误,可以发生在一个脚本. 如果一个错误并不是由一试-赶上声明,它是通过对所以其他报表能够处理的错误. 如果没有其他报表处理错误时,它传递给浏览器来处理. statement1可能发生的地方,这是一个错误,而statement2是用来处理错误. 当一个错误发生,其值传递给抓住丢