내 명령 줄 인수에 대한 오류 검사를 수행하려고합니다.
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를 완전히 우회하는 일부 프로그램을 보았습니다 . 이 경우 NULL
main 메서드 에 전달할 수 있으며이 경우 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);
}
}