求助一个java异常throw子句的问题
自己对于java异常一直有些疑问,今天编程的时候发现:staticvoidtest(){Exceptione=newException();throwe;}publics...
自己对于java异常一直有些疑问,今天编程的时候发现:
static void test()
{
Exception e = new Exception();
throw e;
}
public static void main(String[] args) {
try{
test();
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("c2");
}
catch(Exception e)
{
System.out.println("c3");
}
} 这样的话会报错Unhandled exception type Exception,必须在函数声明加一个 throws Exception才行
而当test中的内容改为
static void test()
{
ArrayIndexOutOfBoundsException e = new ArrayIndexOutOfBoundsException();
throw e;
}
就不会报错,能正常运行。
请教各位大神这是什么原因啊? 谢啦 展开
static void test()
{
Exception e = new Exception();
throw e;
}
public static void main(String[] args) {
try{
test();
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("c2");
}
catch(Exception e)
{
System.out.println("c3");
}
} 这样的话会报错Unhandled exception type Exception,必须在函数声明加一个 throws Exception才行
而当test中的内容改为
static void test()
{
ArrayIndexOutOfBoundsException e = new ArrayIndexOutOfBoundsException();
throw e;
}
就不会报错,能正常运行。
请教各位大神这是什么原因啊? 谢啦 展开
3个回答
展开全部
因为对于异常,分为两种,必须捕获的不是必须捕获的,对于必须捕获处理的异常,如果不catch的话,就必须throw给上层逻辑去处理,否则编译就不会通过,对于不是必须捕获的异常,会在异常发生时程序报错,如:数组下标越界等。
希望能帮到你哦~
希望能帮到你哦~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Java异常分为check Exception还是uncheck Exception,引用Java中的定义:
其中RuntimeException + Error 和其子类都是属于 uncheck
exception
Exception类中除了 RuntimeException之外的类 都是属于 check
exception
uncheck exception表明调用方无需捕获处理该异常,一般是与运行时无法的错误,可能是调用方传递参数的问题,也有可能是虚拟机的问题,反正开发者不应该关注的异常。
check exception表明调用方必须捕获并处理该异常,一般是与运行时有关的错误,例如IO未准备好,文件不存在等,需要开发者关注的异常。
如果不想处理check exception,也可以在自己的方法里直接声明抛出异常throws XXXException即可,但不建议这样做,具体原因参考网上对异常的处理机制吧。
其中RuntimeException + Error 和其子类都是属于 uncheck
exception
Exception类中除了 RuntimeException之外的类 都是属于 check
exception
uncheck exception表明调用方无需捕获处理该异常,一般是与运行时无法的错误,可能是调用方传递参数的问题,也有可能是虚拟机的问题,反正开发者不应该关注的异常。
check exception表明调用方必须捕获并处理该异常,一般是与运行时有关的错误,例如IO未准备好,文件不存在等,需要开发者关注的异常。
如果不想处理check exception,也可以在自己的方法里直接声明抛出异常throws XXXException即可,但不建议这样做,具体原因参考网上对异常的处理机制吧。
追问
我想请问一下 那我上面test()中的代码 表示ArrayIndexOutOfBoundsException没有被处理吗? 只是在方法名后面少加了一个 throws语句啊,我怎么感觉对于ArrayIndexOutOfBoundsException加不加throws效果都一样,这和check有什么关系吗?
追答
throws是对编译时的方法进行声明,表示调用这个方法可能会抛出这个异常,如果这个异常是个check Exception,表明调用方在异常抛出时应该处理该异常,如果体现在代码上就是要不使用try catch把异常捕获进行处理,要不自己也加上throws声明。uncheck Exception就不一样,即使声明抛出了,调用方在代码上可以不去处理这个异常。
无论是check Exception还是uncheck Exception,在运行时的处理都是一样的。
自己定义的Exception是一个check Exception,所以如果抛出了,你就必须捕获或者加上throws抛出。
ArrayIndexOutOfBoundsException是一个uncheck Exception,即使代码会抛出,但调用方不一定要捕获或者加上throws抛出。
实际对ArrayIndexOutOfBoundsException这个异常也可以理解成数组越界,定义成uncheck Exception是因为这个异常实际上跟运行时无关,更多的是因为代码写得有问题,所以这个异常不应该由程序来捕获,而应该由开发者进行处理。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自定义异常的抛出?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询