黑马程序员技术交流社区

标题: 关于异常的问题 [打印本页]

作者: 松毛    时间: 2013-10-18 09:44
标题: 关于异常的问题
class TryCatchDemo
{
        public static void main(String[] args)
        {
                System.out.println(test(null)+","+test("0")+test(""));
        }

        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
                {
                        return 4;
                }
        }
}

以上代码执行的结果是什么(这个并不重要,可以敲出来嘛!)?  它是怎么实现的啊?还有str.charAt(0)-'0'是什么意思啊?
(第一次发帖,有点小激动啊!如有幼稚的地方还请各位大虾包含一下,在此谢过给位百忙中帮忙解答。)

[img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\1160621596\QQ\WinTemp\RichOle\){CUHE$3[G9B]IR)UG4K2(2.jpg[/img]


){CUHE$3[G9B]IR)UG4K2(2.jpg (30.96 KB, 下载次数: 25)

){CUHE$3[G9B]IR)UG4K2(2.jpg

作者: 雷丹    时间: 2013-10-18 10:56
在str.charAt(0)-'0'中str是传入的一个String变量,str.chatAt(0)就是获取到传进来的这个String的第一个字符,然后获取到的第一个字符和‘0’这个字符做减法运算。在ASCII码中就像‘a’好像代表96把字符转换成数字就可以做减法了。str.chatAt得到的是一个String如果和‘0’这个字符做减法,系统可能会隐式地把这个String转换成char做减法。
作者: 李文帅    时间: 2013-10-18 11:30
运行结果为4,44,出现这种结果的原因是finally语句块导致的,因为finally语句块是一定会运行的,所以以上结果都被4覆盖了。如果把finally语句块去掉的话,结果会是1,02,test(null)是空指针异常,被第一个catch捕获,打印错误信息并返回1;test("0")没有异常,因为返回值是int型,所以默认返回0;test("")是字符串下标越界异常,是RuntimeException异常,呗第二个catch捕获,打印错误信息,并返回2;至于str.charAt(0)-'0',str.char(0)是取字符串str中第0个字符,也就是str中第一个字符,str.charAt(0)-'0'表示返回两个字符对应的ASCII值的差,是int型数据
作者: 李文帅    时间: 2013-10-18 11:32
去掉finally语句块后的运行结果,如图

TryCatchDemo.PNG (24.93 KB, 下载次数: 36)

TryCatchDemo.PNG





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2