黑马程序员技术交流社区

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

作者: 郑强强    时间: 2012-4-12 22:49
标题: 关于异常的问题

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语句,这有什么不同吗,一个能运行一个不能,到底为什么呢?
作者: 石好强    时间: 2012-4-12 23:51
楼主下面一个把 return 去掉,就代表着,程序一旦发生异常,也就是 a=System.in.read();这句没有执行成功,a没有被赋值成功,而System.out.println(a);
却依旧要执行,但是此时的a是没有被赋值初始化的,所以你编译时就会出错。

有return,一旦发生异常 不会执行System.out.println(a);
作者: 王永旺    时间: 2012-4-12 23:58
本帖最后由 王永旺 于 2012-4-13 00:00 编辑

如果不加return语句的话,会造成程序在遇到IOException的时候,a中没有数据的情况。所以就无法输出了,当然就会编译错误。
有return 就会使语句跳出循环。
所以注释掉return语句的话,要给a一个初始值。这时候定义int a时给a一个初始值就行,如int 啊= 0;
作者: 邓斌    时间: 2012-4-12 23:59
return 是结束语句。。。
异常发生。catch()捕获。。try{}是没执行的。System.out.println(a); try没执行 a就没赋值。。所以 错误:
Lxi.java:36: 错误: 可能尚未初始化变
      System.out.println(a);
                         ^
1 个错误
去掉return.把 System.out.println(a); 放入try{}中也可以的

作者: 黑马-刘昌文    时间: 2012-4-13 10:45
在catch中加了return,代码在遇到异常了就结束了,不会执行后面的代码了,如果不加return,异常捕获后,程序是还可以继续向下执行的!




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