JAVA大家帮帮我,我的组数自定义异常用使用throw抛出到main函数的,但是main函数的catch块没有捕获到异常
JAVA大家帮帮我,我的组数自定义异常用使用throw抛出到main函数的,但是main函数的catch块没有捕获到异常,请大家看看我的哪里哪里有逻辑错了,小弟初学者好多...
JAVA大家帮帮我,我的组数自定义异常用使用throw抛出到main函数的,但是main函数的catch块没有捕获到异常,请大家看看我的哪里哪里有逻辑错了,小弟初学者好多不会,谢谢了。代码入下:
第一个类:
第二个类:
第一个类:
package god.yaoshun.MyExceptioner
public class MyException extends Exception {
String message;
//构造方法初始化
public MyException(String ErrorMessage){
message= ErrorMessage;
}
@Override
public String getMessage() {
return message;
}
}
————————————————————————————————————————————
第二个类:
package god.yaoshun.MyExceptioner;
public class MyExceptionTest {
public static int array(int k) throws MyException {
int[] arr = new int[k];
for (int i = 0; i < k + 1; i++) {
System.out.println(arr[k]);
}
throw new MyException("数组下标越界!");
}
public static void main(String[] args) {
try {
array(2);
} catch (MyException e) {
//为什么这里没有捕获到异常啊~上面的我代码哪里有问题了
System.out.println("捕获到异常");
System.out.println(e.getMessage());
} finally {
System.out.println("请重新修改数组");
}
}
}
看吧,我运行过后并没有显示catch块中的语句呢! 展开
第一个类:
第二个类:
第一个类:
package god.yaoshun.MyExceptioner
public class MyException extends Exception {
String message;
//构造方法初始化
public MyException(String ErrorMessage){
message= ErrorMessage;
}
@Override
public String getMessage() {
return message;
}
}
————————————————————————————————————————————
第二个类:
package god.yaoshun.MyExceptioner;
public class MyExceptionTest {
public static int array(int k) throws MyException {
int[] arr = new int[k];
for (int i = 0; i < k + 1; i++) {
System.out.println(arr[k]);
}
throw new MyException("数组下标越界!");
}
public static void main(String[] args) {
try {
array(2);
} catch (MyException e) {
//为什么这里没有捕获到异常啊~上面的我代码哪里有问题了
System.out.println("捕获到异常");
System.out.println(e.getMessage());
} finally {
System.out.println("请重新修改数组");
}
}
}
看吧,我运行过后并没有显示catch块中的语句呢! 展开
1个回答
展开全部
for (int i = 0; i < k + 1; i++) {
System.out.println(arr[k]); // 这里有问题,你使用的是k
}
throw new MyException("数组下标越界!");
根据array(2); ,k = 2,所以
System.out.println(arr[k]); 这里就 报错了,程序执行不到throw new MyException("数组下标越界!"); 这行,
因此你捕获不到MyException 异常;
如果仅仅只是测试自定义异常,改成下面的代码,运行下看看效果
for (int i = 0; i < k + 1; i++) {
throw new MyException("数组下标越界!");
}
亲,如果回答满意,请及时采纳,你的合作是我回答的动力,谢谢!!!
追问
额 改一个代码就正确了,我想请问一下,我先前在for循环里面输出arr[k+1]为什么逻辑错误了呢,我想了半天想明白头都晕了~~arr[k+1]不是超出数组了吗?
追答
public static int array(int k) throws MyException {
int[] arr = new int[k]; // 定义了一个数组,长度k
for (int i = 0; i < k + 1; i++) {
System.out.println(arr[k]); // 这里你没有直接使用循环变量i,而是直接使用k
// 由于数组下标从0开始,因此arr 最大下标=k-1
// 所以arr[k] 直接下标越界了,抛出异常
}
throw new MyException("数组下标越界!");
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询