【问题标题】:Error in ArrayIndexOutOfBoundsException: 0ArrayIndexOutOfBoundsException 中的错误:0
【发布时间】:2013-07-08 08:17:03
【问题描述】:

我在java.lang.ArrayIndexOutOfBoundsException: 0 中遇到了错误,那么如何避免这个错误呢?

package javaapplication1;

import java.net.*;
import java.io.*;

public class Url {

    public static void main(String[] args) {
        try {
            URL url = new URL(args[0]);
            System.out.println("URL is " + url.toString());
            System.out.println("protocol is "
                    + url.getProtocol());
            System.out.println("authority is "
                    + url.getAuthority());
            System.out.println("file name is " + url.getFile());
            System.out.println("host is " + url.getHost());
            System.out.println("path is " + url.getPath());
            System.out.println("port is " + url.getPort());
            System.out.println("default port is "
                    + url.getDefaultPort());
            System.out.println("query is " + url.getQuery());
            System.out.println("ref is " + url.getRef());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at javaapplication1.Url.main(Url.java:10) Java Result: 1

【问题讨论】:

  • 您是否将任何命令行参数传递给您的应用程序? (即 args[0] 正在抛出异常,因为数组中没有任何内容)
  • args 数组为空...
  • 为避免错误,请不要引用不存在的数组元素。
  • 希望对此投票否决的人留下一个理由。我发现否决票很神秘。

标签: java arrays runtime-error indexoutofboundsexception


【解决方案1】:

您必须先检查 args 表是否为空。我建议使用这样的东西:

    try{
        if(args.length > 0){
            URL url = new URL(args[0]);
            System.out.println("URL is " + url.toString());
            System.out.println("protocol is " + url.getProtocol());
            System.out.println("authority is " + url.getAuthority());
            System.out.println("file name is " + url.getFile());
            System.out.println("host is " + url.getHost());
            System.out.println("path is " + url.getPath());
            System.out.println("port is " + url.getPort());
            System.out.println("default port is " + url.getDefaultPort());
            System.out.println("query is " + url.getQuery());
            System.out.println("ref is " + url.getRef());
        } 
    }
    catch (IOException e) {
        e.printStackTrace();
    }

【讨论】:

    【解决方案2】:

    为避免错误,您必须在访问该数组的索引 0 之前检查数组的长度 args。 在大多数情况下,最好打印一些使用消息并退出并返回某个错误代码。

    if (args.length != 1)
    {
       System.err.println("Wrong number of arguments!");
       System.err.println("Usage: java javaapplication1.Url <URL>");
       int errorcode = -1; // choose an appropriate number here!
       System.exit(errorcode);
    }
    // now you can be sure that the args has exactly one element.
    

    【讨论】:

      【解决方案3】:

      问题是您在运行时没有传入参数,因此 arg[0] 不存在。

      我会在程序的最开始添加一个检查,以确保参数数组实际上已经传入。

      类似:

      if(args.length>0) {
      //Rest of your code here...
      }
      

      【讨论】:

        【解决方案4】:

        发生此错误是因为传递给java程序的参数数组没有元素或没有参数传递给程序,为了避免这种情况在使用它的值之前进行检查

        if(args.length > 0) {
            // do your task
        }
        

        那么你的 amin 将是

        public static void main(String[] args) {
            if(args.length > 0) {
                try {
                    URL url = new URL(args[0]);
                    System.out.println("URL is " + url.toString());
                    System.out.println("protocol is "
                            + url.getProtocol());
                    System.out.println("authority is "
                            + url.getAuthority());
                    System.out.println("file name is " + url.getFile());
                    System.out.println("host is " + url.getHost());
                    System.out.println("path is " + url.getPath());
                    System.out.println("port is " + url.getPort());
                    System.out.println("default port is "
                            + url.getDefaultPort());
                    System.out.println("query is " + url.getQuery());
                    System.out.println("ref is " + url.getRef());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        

        【讨论】:

          【解决方案5】:

          您似乎没有将 url 作为命令行参数传递。

          尝试运行类似“java Url ”的程序 例如java URL www.google.com

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-03-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            • 2019-04-15
            相关资源
            最近更新 更多