Formatter类无法正常工作

时间:2014-09-17 03:38:19

标签: java formatter

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"分配值。我不知道为什么"最后格式化程序x;"没有转移。

3 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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();
        }
    }

答案 2 :(得分:0)

声明为final且未初始化的变量称为空白最终变量。空白的最终变量会强制构造函数初始化它。

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

您的代码无法正常工作的原因是您已将其声明为最终版,它已初始化为null,并且因为它是最终版,您无法为其重新分配值。\ n <\ n \ n <\ n / p>