-1

はい、StackoverflowにあるNPEに関する優れた説明を読み、その意味を理解しました。それでも、その教科書のサンプル演習の1つで、このNPEに関する問題を見つけました(実際、私はずっと前にハーバードで使用していました)。

これは、参照変数String line=nullについてです。説明にあるように、後でそのように使用しようとしている間はオブジェクトが作成されていません(私はそう思います)。より正確には、line = inputStream.nextLine();のときにアクセスしようとします。ここにコードがあり、問題はそれを修正する方法です。オブジェクトをインスタンス化しようとしましたが...機能しませんでした。

package test;

import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.FileOutputStream;

public class Test
{
    public static void main(String[] args) {
        Scanner inputStream = null;
        PrintWriter outputStream = null;
        try {
            inputStream = new Scanner(new FileInputStream("original.txt"));
            outputStream = new PrintWriter(
            new FileOutputStream("numbered.txt"));
        } catch (FileNotFoundException e) {
            System.out.println("Problem opening files.");
            System.exit(0);
        }
        String line = null;
        int count = 0;
        while (inputStream.hasNextLine()) {
            line = inputStream.nextLine();
            count++;
            outputStream.println(count + " " + line.toString());
        }
        inputStream.close();
        outputStream.close();
    }
}

そして、はい、私はそれを実行しようとしました。Netbeans7.3で新しく作成したプロジェクトにコードをコピーして貼り付けました

4

2 に答える 2

4

line = inputStream.nextLine( );オブジェクトにアクセスしようとはしません。line変数に値を割り当てますline。したがって、行がそうである必要はありませんnull

于 2013-03-25T20:19:43.320 に答える
4
line = inputStream.nextLine( )

に値を割り当てますline。特にメソッドを呼び出そうとして、の現在の値を読み取ろうとしないlineため、ここでNPEが発生していることはわかりません。その値は割り当てによって上書きされるため、この時点で問題lineありません。null

このコードを実際に実行して、疑惑を証明するようにしてください。

于 2013-03-25T20:19:48.730 に答える