java数组越界不报异常

时间:2021-05-31 19:30:45
本机系统 win7 32位旗舰版 ;jdk版本1.6.0;编写如下程序
class divdemo
{
int div(int a,int b)   throws Exception
        {    
int[] ary=new int[3];
System.out.println(ary[a]);
return a/b;
}
}
class demo8 
{
public static void main(String[] args) 
{


                divdemo d=new divdemo();
try{
int x=d.div(5,1);
                      System.out.println();
}
catch(Exception e){
System.out.println(e.getMessage());
}

System.out.println("Hello World!");
}
}
很明显程序执行到调用divdemo类的方法div时,出现了数组越界,可java不报越界异常,求解释

13 个解决方案

#1


谁说不抛异常的?
catch(Exception e){
System.out.println(e.getMessage());
}
改成
catch (Exception e) {
e.printStackTrace();
}

#2


当然有异常了,只是楼主这里用try,catch捕获了这个异常。

#3


加上e.printStackTrace();
java.lang.ArrayIndexOutOfBoundsException: 5
5
Hello World!
at divdemo.div(Demo8.java:6)
at Demo8.main(Demo8.java:18)

getMessage() 的值是5
下次注意 e.getClass().getName();也要写

#4


楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5

#5


引用 4 楼  的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


+1

#6


怎么会没有异常呢?楼主仔细看一下catch里的信息吧

#7


引用 4 楼  的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5

可以结贴了

#8


引用 4 楼  的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


5不是异常代号的意思
原数组ary长度只有3,现在通过int x=d.div(5,1)去访问ary[5]肯定抛越界异常。
5的意思是访问数组越界的下标,即div(5,1)中的5,通过这个就知道什么地方出错了。

#9


引用 8 楼  的回复:
引用 4 楼 的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


5不是异常代号的意思
原数组ary长度只有3,现在通过i……

恩。。没有什么代号一说,你这个arr[X] 你catch里打印的就是x

#10


凑个热闹:
1、方法一:把catch(Exception e){
System.out.println(e.getMessage());
}
改成
catch (Exception e) {
e.printStackTrace();
}
方法二:把int div(int a,int b) throws Exception
  {   
    int[] ary=new int[3];
    System.out.println(ary[a]);
    return a/b;
  }
改成int div(int a,int b)
  {   
try
{
    int[] ary=new int[3];
    System.out.println(ary[a]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
    return a/b;
  }

java.lang.ArrayIndexOutOfBoundsException: 5,指示报的是"数组越位的值"。而不是说输出之类的说法。

#11


你把try,catch去掉就能看出来了

#12



try{
int x=d.div(5,1);
  System.out.println();
}
catch(Exception e){
System.out.println(e.getMessage());
}


你不是已经捕获了吗?如果你不捕获,就一直抛到最上面,然后就调用默认的异常方法了,也就是楼主所说的跑出的异常了。
楼主可以去了解下异常类,有运行时异常和非运行时异常,RuntimeException是可以不捕获的。

#13


引用 9 楼  的回复:
引用 8 楼  的回复:
引用 4 楼 的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


5不是异常代号的意思
原数……


呵呵,谢谢提醒,学习了,我是Java菜鸟一个,谢谢大家的帮助

#1


谁说不抛异常的?
catch(Exception e){
System.out.println(e.getMessage());
}
改成
catch (Exception e) {
e.printStackTrace();
}

#2


当然有异常了,只是楼主这里用try,catch捕获了这个异常。

#3


加上e.printStackTrace();
java.lang.ArrayIndexOutOfBoundsException: 5
5
Hello World!
at divdemo.div(Demo8.java:6)
at Demo8.main(Demo8.java:18)

getMessage() 的值是5
下次注意 e.getClass().getName();也要写

#4


楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5

#5


引用 4 楼  的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


+1

#6


怎么会没有异常呢?楼主仔细看一下catch里的信息吧

#7


引用 4 楼  的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5

可以结贴了

#8


引用 4 楼  的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


5不是异常代号的意思
原数组ary长度只有3,现在通过int x=d.div(5,1)去访问ary[5]肯定抛越界异常。
5的意思是访问数组越界的下标,即div(5,1)中的5,通过这个就知道什么地方出错了。

#9


引用 8 楼  的回复:
引用 4 楼 的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


5不是异常代号的意思
原数组ary长度只有3,现在通过i……

恩。。没有什么代号一说,你这个arr[X] 你catch里打印的就是x

#10


凑个热闹:
1、方法一:把catch(Exception e){
System.out.println(e.getMessage());
}
改成
catch (Exception e) {
e.printStackTrace();
}
方法二:把int div(int a,int b) throws Exception
  {   
    int[] ary=new int[3];
    System.out.println(ary[a]);
    return a/b;
  }
改成int div(int a,int b)
  {   
try
{
    int[] ary=new int[3];
    System.out.println(ary[a]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
    return a/b;
  }

java.lang.ArrayIndexOutOfBoundsException: 5,指示报的是"数组越位的值"。而不是说输出之类的说法。

#11


你把try,catch去掉就能看出来了

#12



try{
int x=d.div(5,1);
  System.out.println();
}
catch(Exception e){
System.out.println(e.getMessage());
}


你不是已经捕获了吗?如果你不捕获,就一直抛到最上面,然后就调用默认的异常方法了,也就是楼主所说的跑出的异常了。
楼主可以去了解下异常类,有运行时异常和非运行时异常,RuntimeException是可以不捕获的。

#13


引用 9 楼  的回复:
引用 8 楼  的回复:
引用 4 楼 的回复:
楼主,你的程序有数组越界异常,只是被你的catch捕获并打印出异常的ID,而没有显示异常的详细信息。

请将e.getMessage()改成e.toString()就可以看到:java.lang.ArrayIndexOutOfBoundsException: 5,表明产生了数组越界异常,异常代号为5


5不是异常代号的意思
原数……


呵呵,谢谢提醒,学习了,我是Java菜鸟一个,谢谢大家的帮助