Java ArrayIndexOutOfBoundsException中出错:0

Java ArrayIndexOutOfBoundsException中出错:0,java,arrays,runtime-error,indexoutofboundsexception,Java,Arrays,Runtime Error,Indexoutofboundsexception,我在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]);

我在
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();
        }
    }
}
错误:
您似乎没有将url作为命令行参数传递

尝试运行类似“java Url<此处提供Url>”的程序
e、 g.java Url www.google.com

发生此错误的原因是传递给java程序的参数数组没有元素,或者没有向程序传递Arumgin,为避免此错误,请在使用其值之前进行检查

if(args.length > 0) {
    // do your task
}
那你的阿明就死定了

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();
        }
    }
}

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

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

比如:

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

要避免此错误,必须在访问此数组的索引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.
if(args.length!=1)
{
System.err.println(“参数数量错误!”);
System.err.println(“用法:javajavaapplication1.Url”);
int errorcode=-1;//在这里选择一个合适的数字!
系统退出(错误代码);
}
//现在可以确保args只有一个元素。

您必须首先检查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();
    }

您是否向应用程序传递任何命令行参数?(即,args[0]正在引发异常,因为数组中没有任何内容)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();
    }