黑马程序员技术交流社区
标题:
catch块问题
[打印本页]
作者:
吴在兴
时间:
2013-1-26 10:53
标题:
catch块问题
class Jisuan
{
public int chu(int a,int b) throws ArithmeticException,ArrayIndexOutOfBoundsException
{
int[] arr=new int[a];
System.out.println(arr[4]);
return a/b;
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Jisuan ji=new Jisuan();
try{
int x=ji.chu(6,2);
System.out.println("x=="+x); //当出现异常时,异常语句后面不再执行
}catch(Exception e){ //如果多个catch块中有出现继承关系,父类异常catch块放在最下面
e.printStackTrace();
}catch(ArithmeticException e)
{
System.out.println(e.getMessage()); //异常信息
System.out.println(e.toString()); //异常名称:异常信息
e.printStackTrace(); //异常名称:异常信息 异常出现的位置
}catch(ArrayIndexOutOfBoundsException e)
{
System.out.println(e.toString());
}
}
}
复制代码
为什么程序没有出现异常情况的条件(分母不为0,数组没溢出) 还会捕获异常啊 毕老师说的我还没听懂
作者:
唐晓
时间:
2013-1-26 11:07
你Jisuan类里定义的是public int chu(int a,int b),两个参数是你要传递的。有传递就会出现异常,你代码运行的时候条件都满足,因为你自己知道,会绕开异常,但是如果你给别人用呢,别人又不知道这里分母不能为0,所以程序要全面的考虑异常的可能性。
作者:
黑马张英涛
时间:
2013-1-26 11:25
因为你在chu(int a,int b) 这个方法上面已经声明了throws ArithmeticException,ArrayIndexOutOfBoundsException
所以,不管你给他传递什么数据,这个方法的调用者必须对他声明的异常处理,要么抓,要么抛
作者:
吴在兴
时间:
2013-1-26 13:34
哦 这样啊 哈 了解了谢谢啊
作者:
杨世平
时间:
2013-1-26 13:42
{:soso_e153:}这代码貌似有毛病吧,你写的时候没有出现编译错误吗??
你在写catch语句的时候应该从小写到大catch(Exception e){ 是最大的,其他的异常都是继承的,所以他要放在最后一个catch语句中。。。。
作者:
贾文泽
时间:
2013-1-26 13:49
你在上面的函数上声明异常了,额,
public int chu(int a,int b) throws ArithmeticException,ArrayIndexOutOfBoundsException
声明后要么捕获处理,要么抛出,
除非你声明的异常是RuntimeException的子类
RuntimeException 是特殊子类异常,一旦该异常发生,程序运行时就会报错
作者:
刘郑瑞
时间:
2013-1-26 13:52
你说的很对,为什么没有出现异常还要捕获异常。是不是不需要么。当然需要首先,这是给编译器看的,而后你有很多想不到出现异常的情况会让你
束手无策。(代码往往那个不可能那么简单)那个时候你欲哭无泪。如下例子:(a和b是变量)如下代码典型的数组角标越界。
public class Test1 {
public static void zz(int a){
int[] arr = new int[a];
for(int i =1;i<100;i++){
arr[i]=i;
System.out.println(arr[i]);
}
}
public static void main(String[] args){
zz(99);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2