黑马程序员技术交流社区

标题: 急!!!为什么catch后面不能加IOException?? [打印本页]

作者: MGC    时间: 2014-8-5 17:41
标题: 急!!!为什么catch后面不能加IOException??
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test6 {

                public static void main(String[]args)
                {       
                        BufferedReader hm=new BufferedReader(new InputStreamReader(System.in));
                        int[] arr=new int[5];
                        int max=0;
                        for(int x=0;x<5;x++)
                        {
                               
                                try
                                        {
                                                System.out.println("请输入第"+(x+1)+"个数字");
                                                arr[x]=Integer.parseInt(hm.readLine());
                                        }
                                catch(Exception e)
                                        {
                                                e.printStackTrace();  
                                        }

                                if(x==0)
                                {
                                        max=arr[x];
                                        min=arr[x];
                                }
                                else
                                {
                                        if(arr[x]>max)
                                        {
                                                max=arr[x];
                                        }
                                        if(arr[x]<min)
                                        {
                                                min=arr[x];
                                        }
                                }
                               
                        }       
                        System.out.println("输入的数据中最大值为"+max);
       
                        System.out.println("输入的数据中最小值为"+min);
                }
               
               
}
如题,为什么catch后面不能加IOException??
作者: 唕    时间: 2014-8-5 18:03
本帖最后由 唕 于 2014-8-5 18:04 编辑


好像你前面加import java.io.*;就可以了  不知为什么

作者: 思维    时间: 2014-8-5 18:25
BufferedReader hm=new BufferedReader(new InputStreamReader(System.in));这里面不是也有IOException吗?
作者: paozhuanyinyu    时间: 2014-8-5 18:36
没有导入包,或导入import java.io.IOException;或导入import java.io.*;
作者: GoodBoy123    时间: 2014-8-5 19:16
你没导包的原因,
作者: 怀念黑海岸    时间: 2014-8-5 20:02
本帖最后由 怀念黑海岸 于 2014-8-5 20:08 编辑

       楼上的都没说到点子上哦,
       arr[x]=Integer.parseInt(hm.readLine());
       这句代码是会抛出两个异常的哦,第一个产生于readLine()方法,这个异常就是IOException异常。然后你在对接受到的数据进行格式转换时:会产生一个运行时异常:NumberFormatException--数据类型转换异常,这个异常不是IO异常下的子异常,而是属于IllegalArgumentException中的子异常,他是归属RuntimeException下的,这个异常产生的条件是:当你往键盘输入一组非纯数字组成的字符串时,就会抛出这个异常。你总不能把a s >*¥这些东西给我转换成数字吧,即使按照字符表转换过来了也不是你想要的结果啊.
      所以这儿不能用IOException捕获异常的原因就是他了,而Exception是IOException和RuntimeException的父类,所以你直接用父类去捕获异常这是允许的,但是对于问题处理去不适合。建议分别catch两个异常,分别处理. IOException异常处理过程随意,但是数据格式转换异常中的处理方式建议写成:
      catch(NumberFormatException e){
       continue;                            //因为键盘输入数据有误,所以重新跳回键盘输入地方再次等待键盘录入。直到键盘输入纯数字字符串为止。
      }

作者: 师偃    时间: 2014-8-5 20:06
没导包把~import java.io*
eclipce快捷键在异常处shift+ctrl+o
作者: MGC    时间: 2014-8-5 21:52
怀念黑海岸 发表于 2014-8-5 20:02
楼上的都没说到点子上哦,
       arr[x]=Integer.parseInt(hm.readLine());
       这句代码是会抛 ...

谢谢你的回答,我试过你的方法还是不行,但导入IOEception后就可以
作者: 王凯路路    时间: 2014-8-5 22:25
哥们, 倒包, 如果你嫌一个一个倒包麻烦, 直接来个   java.io.*;不就得了 ? 如果你这是想省资源...那你就来个java.io.IOException
作者: zxtanshui    时间: 2014-8-5 22:28
导   包   
作者: interface_sfly    时间: 2014-8-5 22:29
楼上全说好了。。
作者: 黑马-胡明    时间: 2014-8-5 22:37
可能是try要执行的代码出现的并不是IOException异常。而,Exception是所有异常的父类,父类肯定就行得通了。
作者: liujingnan    时间: 2014-8-5 23:24
没导包   在前面加上import java.io*




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