gpt4 book ai didi

java - 在哪里关闭在类里面使用过一次的扫描仪

转载 作者:搜寻专家 更新时间:2023-10-31 20:12:19 24 4
gpt4 key购买 nike

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

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

最佳答案

假设此代码在类 Ssss 中(如它所显示的那样),请考虑:

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

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

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

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

关于java - 在哪里关闭在类里面使用过一次的扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com