2017-02-15 18 views
1

Попытка найти правильную ошибку, когда args [0] не найден.Java try/catch args [0] не найден

class Main 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      String filename = args[0]; 
     } 
     catch (ExceptionInThread e) 
     { 
      System.out.println(“No file found”); 
     } 
    } 
} 

Я получаю ошибку samme:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: o at Main.main(Main.java:9) 

Может кто-нибудь сказать мне, как я могу найти правильную ошибку поймать?

+1

'args.length' .... Не нужно генерировать исключение, если вы можете просто проверить, должно ли оно существовать. – SomeJavaGuy

+4

«Может кто-нибудь сказать мне, как я могу найти правильную ошибку, чтобы поймать?» В сообщении об ошибке упоминается исключение для catch ... – tkausl

+0

И причина, по которой ваш текущий подход терпит неудачу, заключается в том, что вы поймаете неправильное исключение. Тем не менее, это не лучшее решение. Лучшее решение - не бросать его в первую очередь. См. Связанные вопросы и ответы –

ответ

0

Поскольку все исключения наследуют от Exception, это улов всего:

public static void main(String[] args){ 
    try { 
     String filename = args[0]; 
    } catch (Exception e) { 
     System.out.println("No file found"); 
    } 
} 

Но это, как правило плохая практика, как вы поймать каждый тип ошибки - дон Не делай этого.

Чтобы ответить вам вопрос: Вы нашли имя Exception/тип в сообщении об ошибке Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException, где ArrayIndexOutOfBoundsException исключение поймать:

catch (ArrayIndexOutOfBoundsException e) То, что вы сделали ловил неправильное исключение, и поэтому ошибка не зацепилась. В вашем случае это также не самый чистый способ пойти.

Лучший способ в моих глазах, чтобы проверить args массив, прежде чем пытаться получить к нему доступ:

ìf args.length > 0

Если вы хотите напечатать сообщение об ошибке, вы можете использовать System.err.println("No file found"); вместо System.out

+1

Показаны люди, как поймать «Исключение» - плохая идея. Скорее всего, кто-то перестанет читать, как только увидит код .... и скопируйте ваш пример плохого кода. –

+0

Вы правы, поэтому я также сказал, что это плохая практика. – ppasler

0

потому, что массив не содержит какой-либо элемент, так что, когда вы пытаетесь получить args[0] на самом деле это не существует, поэтому, если вы хотите, чтобы получить значение, вы должны проверить, если он пуст или нет:

//if your array is not empty you can get values 
if(args.length > 0){ 
    String filename = args[0]; 
}else{ 
    System.out.println("No file found"); 
} 

Примечание

вы не можете использовать два “” для строки, вы должны использовать "" так изменить ваш

System.out.println(“No file found”); 

To:

System.out.println("No file found");