在课堂上关闭扫描仪的地方多一次

时间:2013-10-25 23:35:18

标签: java methods input java.util.scanner

我知道更好的做法是尽可能减少代码重复,所以我决定在整个类中只声明一个扫描程序,但是我应该在哪里关闭扫描程序对象,或者它不一定要关闭它,关闭什么扫描仪。

  private Scanner scanner;
/**
 * Constructor for objects of class Scanner
 */
public Ssss()
{
    // initialise instance variables
     scanner = new Scanner(System.in);
}
public void enterYourName()
{
    System.out.println("Enter your Name");
    String name = scanner.nextLine();
    System.out.println("Your name is:" + name);
}
public void enterYourAge()
{
    System.out.println("Enter your Age");
    int age = scanner.nextInt();
        System.out.println("Your age is: " + age);
}

1 个答案:

答案 0 :(得分:4)

假设此代码位于类Ssss中(如图所示),请考虑:

  1. 您的类包含并使用Scanner对象,因此它负责关闭它。
  2. Scanner表示您班级的内部资源,状态......不同的方法会在不同时间引用它。
  3. 您无法知道班级用户(主程序?)何时完成,因此您无法单方面关闭Scanner - 您将在哪里关闭它?
  4. 解决方案是,您的班级Ssss必须提供自己的方法,允许使用Ssss的代码说“我已经完成了您”。此方法传统上称为close(),在其中您将关闭扫描程序(并清理任何其他资源)。

    客户端(调用类)必须在try-finally块中包含类Ssss的用法,并在close()子句中调用 finally方法

    如果您使用的是Java7,那么您的类Ssss应该实现AutoCloseable,以便可以在try-with-resources语句中使用它来利用该Java7功能。