Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
 at ExTestDrive.main(ExTestDrive.java:14):

程序代码如下:

 1 class MyEx extends Exception{}
 2 
 3 public class ExTestDrive {
 4 
 5     
 6     public static void main(String[] args) {  
 7         // TODO Auto-generated method stub
 8          String test=args[0];
 9     try{
10         System.out.println("t");
11         doRisky(test);
12         System.out.println("o");   //如果没有异常,才会执行下面这一句,如果捕获异常,下面这一句直接跳过去了。
13     }catch(MyEx e){
14         System.out.print("a");
15         
16     }finally{
17         System.out.println("w");
18         
19         }
20         System.out.println("s");
21     
22     }
23 
24      static void doRisky(String t) throws MyEx {
25          
26          System.out.println("h");
27          if("yes".equals(t)){   //看来t中会存储main函数传送给它的两个值:yes or not.或许是控制台中传递的参数
28              throw new MyEx();
29              
30          }
31          System.out.print("r");
32         // TODO Auto-generated method stub
33         
34     }
35 
36 }
1 你好,这个异常是初学者比较常见的异常。
2 ArrayIndexOutOfBoundsException:注意这个单词,字面意思就是数组引用超出界限,也就是我们常说的越界问题。
3 
4 比如,我们创建了一个数组 int a[] = new int[4] ;
5 那么数组a只能存放四个元素,而数组的下标是从0开始的,也就是说,a[3]就是最后一个元素。当你给a[4]赋值,或者使用a[4]的时候,就出现了ArrayIndexOutOfBoundsException异常。 
1 你的args[]定义的是String数组 只给args[]数组声明 没给它分配空间 所以运行后出现的错误的意思是下标越界,代码如下:、
2 public class b {
3 public static void main(String args[]){
4  args=new String[3];
5  System.out.println("hi!"+args[0]+" "+args[1]+" " +args[2]);
6  
7 }
8 }
9 加args=new String[3];是个它分配空间你有args[0],args[1],args[2]三个所以是String[3],还可以给这数组赋值,如args[0]=new String("java")

添加了一句话:args=new String[3],为这个数组分配了空间。

 1 class MyEx extends Exception{}
 2 
 3 public class ExTestDrive {
 4 
 5     
 6     public static void main(String[] args) {  
 7         // TODO Auto-generated method stub
 8          args=new String[3];
 9          String test=args[0];
10     try{
11         System.out.print("t");
12         doRisky(test);
13         System.out.print("o");   //如果没有异常,才会执行下面这一句,如果捕获异常,下面这一句直接跳过去了。
14     }catch(MyEx e){
15         System.out.print("a");
16         
17     }finally{
18         System.out.print("w");
19         
20         }
21         System.out.print("s");
22     
23     }
24 
25      static void doRisky(String t) throws MyEx {
26          
27          System.out.print("h");
28          if("yes".equals(t)){   //看来t中会存储main函数传送给它的两个值:yes or not.或许是控制台中传递的参数
29              throw new MyEx();
30              
31          }
32          System.out.print("r");
33         // TODO Auto-generated method stub
34         
35     }


运行结果就出来了:

throws。

说明控制台Console发送过来的消息是no.就是没有抛出异常。

原文地址:https://www.cnblogs.com/meihao1989/p/3179560.html