0

Scanner クラスの使用と、このクラスのオブジェクトをインスタンス化できる方法と場所について考えさせられる何かが起こったとき、私は Java で簡単なプロジェクトを作成していました。

さて、Eclipse は、Scanner クラスのオブジェクトをインスタンス化する方法と場所について提案してくれました。

非常に奇妙な Hello World のサンプルで説明します。

これは私が最初に作った形です:

import java.util.Scanner;

public class HelloWorld {

        public static void main(String[] args) {

        Scanner input = new Scanner(System.in); // Object declared inside of main method, accessing the standard input stream.

        System.out.println("Type your name: ");
        String name = input.nextLine();
        System.out.printf("%s%s", "Hello World for you, ".concat(name), "\n");
        }
 }

input次に、Eclipseで、クラス Scanner のインスタンスであるオブジェクトに関するアラートが表示されます。解決策として、彼は私に提案をしました:

import java.util.Scanner;

public class HelloWorld {

        static Scanner input = new Scanner(System.in); // Object declared out of main of static form.

        public static void main(String[] args) {

        System.out.println("Type your name: ");
        String name = input.nextLine();
        System.out.printf("%s%s", "Hello World for you, ".concat(name), "\n");
        }
 }

インポートするクラスのインスタンスを作成する最も一般的な方法、out or inside main method形状のstatic、またはそうでない方法。クラス Scanner と一般的な形式のベスト プラクティスについて誰か教えてもらえますか?

4

2 に答える 2

1

あなたの例を使用すると、コードは次のようになります。

import java.util.Scanner;

public class HelloWorld implements Runnable {

    Scanner input = new Scanner(System.in); 

    public static void main(String[] args) {
        HelloWorld helloWorld = new HelloWorld();
        helloWorld.run();
        helloWorld.close();
    }

    @Override
    public void run() {
        System.out.println("Type your name: ");
        String name = input.nextLine();
        System.out.printf("%s%s", "Hello World for you, " +
                "".concat(name), "\n");

    }

    public void close() {
        input.close();
    }
}

main() メソッドは、クラスをインスタンス化し、実行可能なメソッドを実行するだけです。引数の処理が必要な場合は、メイン メソッドで実行できます。

処理はクラス メソッドで行う必要があります。私が run() を選んだのは、それが私の最も一般的なクラス設定だからです。

パラメータを渡さないデフォルトのコンストラクタがあります。

run メソッドと close メソッドで使用されるため、run メソッドの外に Scanner 定義を置きます。ほとんどの学生はスキャナーのクローズを忘れているため、クローズを独自のメソッドに入れると、それを使用することを覚えておくのに役立ちます.

スキャナ定義が 1 つのメソッドでのみ使用されている場合は、その 1 つのメソッドで定義する必要があります。

于 2013-11-13T14:46:58.807 に答える