5

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

  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);
}
4

1 回答 1

4

假设此代码在一个类中Ssss(如其所示),请考虑:

  1. 您的类包含并使用一个Scanner对象,因此它负责关闭它。
  2. Scanner代表一个内部资源,的类的状态......不同的方法将在不同的时间引用它。
  3. 您无法知道您班级的用户(主程序?)何时完成了它,因此您不能单方面关闭Scanner--您将在哪里关闭它?

解决方案是你的类Ssss必须提供自己的方法,允许代码使用Ssss说“我已经完成了你”。此方法传统上称为close(),在其中您将关闭 Scanner(并清理任何其他资源)。

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

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

于 2013-10-25T23:46:10.203 回答