2014-09-17 5 views
0
import java.util.*; 
import java.io.*; 
import java.lang.*; 

public class CreateFile { 

    final Formatter x; 

    public void openFile() { 
     try { 
      x = new Formatter("testing.txt"); 
      System.out.println("File created"); 
     } catch (Exception e) { 
      System.out.println("You got an error"); 
     } 
    } 

    public void addRecords() { 
     x.format("%s%s%s", "20", "bucky", "roberts"); 
    } 

    public void closeFile() { 
     x.close(); 
    } 
} 

Я получаю сообщение об ошибке «не может присваивать значение переменной x». Я не уверен, почему «окончательный форматтер х»; не переносится.Formatter Класс не работает должным образом

+1

Передача? Вы объявили его «final», оно инициализировано нулевым, и поскольку оно окончательное, вы не можете переназначить его значение. Это все. –

+1

'final' означает final, как только вы его инициализировали, вы не можете повторно инициализировать его. По умолчанию 'x' будет инициализироваться на' null' при создании экземпляра 'CreateFile'. удалить «final» от x –

+1

Мне нравится, когда вопросы содержат фразу «_not working correct _...» – jahroy

ответ

1

Ключевое слово final не позволяет переназначить переменную x. Вы можете либо удалить final ключевое слово или сделать инициализацию прямо в объявлении:

final Formatter x = new Formatter("testing.txt"); 

Однако поскольку конструктор Formatter бросает исключение, поэтому нам нужно назначить косвенно:

public class CreateFile { 

    final Formatter x = getFormatter(); 

    private static Formatter getFormatter() { 
     Formatter res = null; 
     try { 
      res = new Formatter("test.txt"); 
     } catch (FileNotFoundException e) { 
     } 
     return res; 
    } 
} 
+0

, если они объявят подобное, тогда 'x' не будет видно в других методах. – Rustam

+1

Вы действительно в этом уверены? – Krypton

0

сделать так:

import java.util.Formatter; 

    public class Test { 

     Formatter x; 

     public void openFile() { 
      try { 
       x = new Formatter("d:\\testing.txt"); 
       System.out.println("File created"); 
      } catch (Exception e) { 
       System.out.println("You got an error"); 
      } 
     } 

     public void addRecords() { 
      x.format("%s%s%s", "20", "bucky", "roberts"); 
     } 

     public void closeFile() { 
      x.close(); 
     } 
     public static void main(String []args){ 
      Test t=new Test(); 
      t.openFile(); 
      t.addRecords(); 
      t.closeFile(); 
     } 
    } 
0

Переменная, объявленная как окончательная и не инициализированная, называется пустой конечной переменная. Чистая конечная переменная заставляет конструкторы инициализировать ее.

final Formatter x; 
public CreateFile() throws FileNotFoundException { 
    this.x = new Formatter("test.txt"); 
} 

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

+0

Вы действительно уверены, заявив, что «пустая конечная переменная заставляет конструкторы инициализировать ее»? – Krypton

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