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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戎石锁 中级黑马   /  2012-8-6 09:00  /  1454 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戎石锁 于 2012-8-6 14:03 编辑

看了毕老师的视频,还是有点不懂。

class Test
{
        public static void main(String[] args)
        {
                int number;
                try
                {
                        number = System.in.resd();
                        System.out.println("Exception1");
                }
                catch(IOException e)
                {
                        System.out.println("Exception2");
                }
                finally
                {
                        System.out.println("Exception3");
                }
                System.out.println("Exception4")
        }
}


这个能打印出什么?先后顺序是什么?求讲解下

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1 鼓励一下

查看全部评分

3 个回复

倒序浏览
class Test
{
        public static void main(String[] args)
        {
                int number;
                try
                {
                        number = System.in.resd();
                        System.out.println("Exception1"); 1没有抛出异常,所以这里执行
                }
                catch(IOException e)
                {
                        System.out.println("Exception2");由于前面没有抛出异常,所以这里不执行
                }
                finally
                {
                        System.out.println("Exception3");2finally是必执行,所以打印Exception3
                }
                System.out.println("Exception4");3程序执行到这里打印Exception4
        }
}

打印顺序是Exception1
                 Exception3
                 Exception4
这个就是因为程序前面没有抛出异常,所以catch不执行

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
class Test
{
        public static void main(String[] args)
        {
                int number;
                try
                {class Test
{
        public static void main(String[] args)
        {
                int number;
                try
                {
                        number = System.in.resd();
                        System.out.println("Exception1");
                }
                catch(IOException e)
                {
                        System.out.println("Exception2");
                }
                finally
                {
                        System.out.println("Exception3");
                }
                System.out.println("Exception4");
        }
}
在异常处理中,如果有finally语句,若finally前面的语句中没有System.exit(0),强行打断程序,结束JVM的程序,则finally语句是一定会执行的。
在try语句中, 若number = System.in.resd();没有发生异常,则不用执行catch语句,接下来执行System.out.println("Exception1")语句和finally语句。
如果发生了异常,则下面的number = System.in.resd()就不会执行,而是直接开始执行catch语句,然后执行finally语句,现在对于输出结果,你明白了吧

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
import java.io.*;//程序有输入流时,请导包~~

class Test
{
        public static void main(String[] args)
        {
                int number;
                try
                {
                        number = System.in.read();
                        System.out.println("Exception1");
                }
                catch(IOException e)
                {
                        System.out.println("Exception2");
                }
                finally
                {
                        System.out.println("Exception3");
                }
                System.out.println("Exception4");//请注意一些小细节~~
        }
}

结果:
89
Exception1
Exception3
Exception4

程序首先从主函数运行,运行try{}里面的语句,等待键盘输入~~try里面没有有异常、程序运行System.out.println("Exception1");try没有异常,所以catch(IOException e  System.out.println("Exception2");},是不会运行的。而java里面的finally表示程序总会执行的(除了一种情况,在finally之前就退出了虚拟机),最后程序执行行System.out.println("Exception4");

总结:
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 } catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 } finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

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