0

我正在用 Java 制作一个简单的项目时发生了一些事情,这让我想到了 Scanner 类的使用以及我们可以实例化此类对象的方式和位置。

好吧,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");
        }
 }

然后,在 Eclipse 上,我有一个关于我的对象的警报input,即类 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

2

当 Scanner 在 main 方法之外声明时,它是一个类字段,否则它是一个局部变量。根据您是否只想在一个方法中使用您的对象(无需使用扫描仪作为参数调用另一个方法)或让它可用于整个类,您应该将其声明为局部变量或类字段。

于 2013-11-13T14:35:32.270 回答
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() 方法除了实例化类并执行可运行的方法之外什么都不做。如果需要进行任何 args 处理,可以在 main 方法中进行。

处理应该发生在类方法中。我选择了 run(),因为它是我最常用的类设置。

我有一个不传递参数的默认构造函数。

我将 Scanner 定义放在了 run 方法之外,因为它用于 run 方法和 close 方法中。大多数学生忘记了扫描仪关闭,因此将关闭放在自己的方法中有助于记住使用它。

如果 Scanner 定义仅在一种方法中使用,则应在该方法中定义。

于 2013-11-13T14:46:58.807 回答