本例中从未抛出 IO 异常。
public static void main(String[] args){
double r = 0;
System.out.println("Please enter radius of a circle");
try{
Scanner sc = new Scanner(System.in);
r = sc.nextDouble();
}catch(NumberFormatException exe){
System.out.println("Inpvalid radius value");
}catch(IOException exe){
System.out.println("IO Error :" + exe);
}
double per = 2 * Math.PI *r;
System.out.println(per);
}
在下面的程序中,它没有显示任何错误。
public static void main(String[] args) {
int radius = 0;
System.out.println("Please enter radius of a circle");
try
{
//get the radius from console
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
radius = Integer.parseInt(br.readLine());
}
//if invalid value was entered
catch(NumberFormatException ne)
{
System.out.println("Invalid radius value" + ne);
System.exit(0);
}
catch(IOException ioe)
{
System.out.println("IO Error :" + ioe);
System.exit(0);
}
double perimeter = 2 * Math.PI * radius;
System.out.println("Perimeter of a circle is " + perimeter);
我不明白为什么会这样。既然两者都在做同样的目的,为什么不能首先代码抛出 IOException?
既不是
Scanner sc = new Scanner(System.in);
也不是r = sc.nextDouble();
抛出一个 IOException,你为什么要捕获它?
第二个片段是另一个故事:
这个对象:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
肯定会抛出 IOException