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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑强强 中级黑马   /  2012-4-12 22:49  /  1684 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


import java.io.*;
class PrintTest
{
   public static void main(String args[])
   {
     int a;
     try
       {
         a=System.in.read();
       }
       catch(IOException e)
       {
           e.toString();
           return;
       }
           System.out.println(a);
    }  
}


import java.io.*;
class PrintTest
{
   public static void main(String args[])
   {
      int a;
     try
       {
        a=System.in.read();
       }
        catch(IOException e)
       {
        e.toString();
       //return;
       }   
      System.out.println(a);
   }
}
这两个程序只是在catch语句中是否含有return语句,这有什么不同吗,一个能运行一个不能,到底为什么呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
楼主下面一个把 return 去掉,就代表着,程序一旦发生异常,也就是 a=System.in.read();这句没有执行成功,a没有被赋值成功,而System.out.println(a);
却依旧要执行,但是此时的a是没有被赋值初始化的,所以你编译时就会出错。

有return,一旦发生异常 不会执行System.out.println(a);

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王永旺 于 2012-4-13 00:00 编辑

如果不加return语句的话,会造成程序在遇到IOException的时候,a中没有数据的情况。所以就无法输出了,当然就会编译错误。
有return 就会使语句跳出循环。
所以注释掉return语句的话,要给a一个初始值。这时候定义int a时给a一个初始值就行,如int 啊= 0;

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
return 是结束语句。。。
异常发生。catch()捕获。。try{}是没执行的。System.out.println(a); try没执行 a就没赋值。。所以 错误:
Lxi.java:36: 错误: 可能尚未初始化变
      System.out.println(a);
                         ^
1 个错误
去掉return.把 System.out.println(a); 放入try{}中也可以的

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
在catch中加了return,代码在遇到异常了就结束了,不会执行后面的代码了,如果不加return,异常捕获后,程序是还可以继续向下执行的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马