A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 松毛 高级黑马   /  2013-10-18 09:44  /  1367 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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, 下载次数: 5)

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

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 赞一个!

查看全部评分

3 个回复

正序浏览
去掉finally语句块后的运行结果,如图

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

TryCatchDemo.PNG
回复 使用道具 举报
运行结果为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型数据

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报 1 0
在str.charAt(0)-'0'中str是传入的一个String变量,str.chatAt(0)就是获取到传进来的这个String的第一个字符,然后获取到的第一个字符和‘0’这个字符做减法运算。在ASCII码中就像‘a’好像代表96把字符转换成数字就可以做减法了。str.chatAt得到的是一个String如果和‘0’这个字符做减法,系统可能会隐式地把这个String转换成char做减法。

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马