[java] Java : 명령 줄 인수가 null인지 확인

내 명령 줄 인수에 대한 오류 검사를 수행하려고합니다.

public static void main(String[] args)
{
    if(args[0] == null)
    {
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    }
}

그러나 이것은 범위를 벗어난 예외를 반환합니다. 나는 적절한 사용법을 찾고 있습니다.



답변

인수는 절대 null. 그들은 단지 존재하지 않을 것입니다.

즉, 당신이해야 할 일은 당신의 주장의 길이를 확인하는 것입니다.

public static void main(String[] args)
{
    // Check how many arguments were passed in
    if(args.length == 0)
    {
        System.out.println("Proper Usage is: java program filename");
        System.exit(0);
    }
}


답변

@jjnguy의 대답은 대부분의 상황에서 정확합니다. 응용 프로그램을 실행하여 호출하면 정상적인 방식으로 명령 줄에서 실행되는 경우 null인수 배열 (또는 null배열)에 문자열 이 표시되지 않습니다 main.

그러나 응용 프로그램의 다른 부분이 main메서드를 호출하는 경우 null인수 또는 null인수 배열을 전달할 수 있습니다 .

그러나 (2), 이것은 분명히 매우 이례적인 사용 사례입니다, 그리고 그것은에 대한 묵시적 계약의 지독한 위반 main진입 점 방법. 따라서 .NET에서 null인수 값을 확인해야한다고 생각하지 않습니다 main. 드물게 발생하는 경우 호출 코드가 NullPointerException. 결국 계약을 위반하는 것은 호출자의 버그입니다.


답변

이 지점을 확장하려면 :

args 변수 자체가 널 (null)이 될 수 있지만 정상적인 실행을 통해서는 불가능합니다. 정상적인 실행은 java.exe명령 줄의 진입 점으로 사용 됩니다. 그러나 C++JNI로 컴파일 된 코드를 사용 jvm.dll하여 java.exe를 완전히 우회하는 일부 프로그램을 보았습니다 . 이 경우 NULLmain 메서드 에 전달할 수 있으며이 경우 args는 null이됩니다.

항상 확인 if ((args == null) || (args.length == 0))하거나 if ((args != null) && (args.length > 0))필요에 따라 권장 합니다.


답변

을 확인해야합니다 (args == null || args.length == 0). null검사가 실제로 필요 하지는 않지만 좋은 방법입니다.


답변

명령 줄 인수의 특정 위치가 통과되었는지 확인하려면 어떻게 확인합니까? 예를 들어 일부 시나리오에서 2 개의 명령 줄 인수가 전달되고 일부에서는 하나만 전달 된 다음 특정 명령 줄이 전달되었는지 여부를 어떻게 확인합니까?

public class check {

public static void main(String[] args) {
if(args[0].length()!=0)
{
System.out.println("entered first if");
}
if(args[0].length()!=0 && args[1].length()!=0)
{
System.out.println("entered second if");
}
}
}

따라서 위 코드에서 args [1]이 전달되지 않으면 java.lang.ArrayIndexOutOfBoundsException이 발생합니다.

그래서 두 번째 주장이 통과되었는지 여부를 확인하고 통과하면 입력 할 수있는이 문제를 어떻게 해결해야합니까? 최대한 빨리 도움이 필요합니다.


답변

인수를 전달하지 않으면이 경우에도 인수가 초기화되지만 항목 / 요소가 없습니다. 다음 중 하나를 시도하면 동일한 효과를 얻을 수 있습니다 .


public static void main(String[] args) throws InterruptedException {
        String [] dummy= new String [] {};
        if(dummy[0] == null)
        {
            System.out.println("Proper Usage is: java program filename");
            System.exit(0);
        }

    }


답변