2015-11-19 3 views
-1

Я создаю переменную, называемую «имя_файла» в обеих ветвях блока try-catch, поэтому она должна быть доступна независимо от того, выбрана ли ошибка или нет.Переменная в Try-Catch недоступна для другого блока Try-Catch?

Но, увы, когда я пытаюсь использовать переменную «имя_файла» в следующем блоке try-catch, я получаю «не могу найти символ».

package timelogger; 

import java.io.IOException; 

public class TimeLogger { 

    public static void main(String[] args) throws IOException { 
     try { 
      String file_name = args[0]; 
     } 
     catch (IndexOutOfBoundsException e){ 
      String file_name = "KL_Entries.txt"; 
     } 

     try { 
      ReadFile file = new ReadFile(file_name); 
      String[] aryLines = file.OpenFile(); 

      int i; 
      for (i=1; i < aryLines.length - 2; i++) { //-2 because last two lines not entries 
       //System.out.println(aryLines[ i ]) ; 

      } 
      System.out.println(aryLines[1].charAt(24)); 
      System.out.println(aryLines[1].charAt(48)); 
     } 

     catch (IOException e){ 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

Я попытался сделать «имя_файла общественного типа String = ...» вместо этого, но это дало ошибку «незаконное начало выражения» или что-то.

Как это сделать? Я чувствую, что мне не хватает чего-то глупого.

EDIT: Найдено this, указав, что переменные являются локальными для блоков try-catch. Таким образом, исправлена ​​проблема, объявив переменную вне try-catch и затем давая ей значения в блоке try-catch.

+3

объявить свое 'имя_файла' за пределами первой попытки/уловить, но инициализировать его так, как вы сейчас делаете. – gonzo

ответ

1

Переменные, объявленные в блоках try-catch, являются локальными для этих блоков. Итак, объявите переменную за пределами try-catch, а затем присвойте ей значения в try-catch.

Problem with "scopes" of variables in try catch blocks in Java

+0

Рад, что он решил вашу проблему. :) – gonzo

+0

Если вы считаете, что это дубликат, проголосуйте за закрытие как таковое. –

0

Вы пытались определить переменную file_name в блоке попробовать и блок поймать. Однако это означает, что эта переменная доступна только в этом блоке.

Вместо этого вы определяете его снаружи. Поскольку вы предоставляете резервную копию в блоке catch, вы можете определить это как значение по умолчанию и переопределить его аргументом. Поэтому вам больше не нужно пытаться поймать:

Смежные вопросы