我知道更好的做法是尽可能减少代码重复,所以我决定在整个类中只声明一个扫描程序,但是我应该在哪里关闭扫描程序对象,或者它不一定要关闭它,关闭什么扫描仪。
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);
}
答案 0 :(得分:4)
假设此代码位于类Ssss
中(如图所示),请考虑:
Scanner
对象,因此它负责关闭它。Scanner
表示您班级的内部资源,和状态......不同的方法会在不同时间引用它。Scanner
- 您将在哪里关闭它?解决方案是,您的班级Ssss
必须提供自己的方法,允许使用Ssss
的代码说“我已经完成了您”。此方法传统上称为close()
,在其中您将关闭扫描程序(并清理任何其他资源)。
客户端(调用类)必须在try-finally块中包含类Ssss
的用法,并在close()
子句中调用 finally
方法
如果您使用的是Java7,那么您的类Ssss
应该实现AutoCloseable
,以便可以在try-with-resources语句中使用它来利用该Java7功能。