Java 如何处理scanner类中的资源泄漏问题

Java 如何处理scanner类中的资源泄漏问题,java,Java,下面的代码获取动物的名称和年龄并显示出来。当我给狗取1时,第一次代码正确运行,第二次给1时,即当计数更改为2时,代码只获取年龄并跳过名称 这在Dog和Cat类中都会发生。IDE还显示,扫描仪扫描附近存在资源泄漏问题。请给我一个解决办法 注意:这是我第一次用java编程,所以我不能清楚地解释这个问题。所以请原谅我的缺点 /** * */ 包装宠物; 导入java.util.Scanner; /** *@作者Karthic Kumar * */ 公营宠物{ 公共静态整数总计=0; 公家犬 { 智力

下面的代码获取动物的名称和年龄并显示出来。当我给狗取1时,第一次代码正确运行,第二次给1时,即当计数更改为2时,代码只获取年龄并跳过名称

这在
Dog
Cat
类中都会发生。IDE还显示,
扫描仪扫描附近存在资源泄漏问题。请给我一个解决办法

注意:这是我第一次用java编程,所以我不能清楚地解释这个问题。所以请原谅我的缺点

/**
* 
*/
包装宠物;
导入java.util.Scanner;
/**
*@作者Karthic Kumar
*
*/
公营宠物{
公共静态整数总计=0;
公家犬
{
智力年龄;
字符串名;
int serial_no=1;
扫描仪扫描=新扫描仪(System.in);
public void get_name()
{   
System.out.println(“输入狗的名字:”);
name=scan.nextLine();
}
公共空间获取时间()
{
System.out.println(“输入狗的年龄:”);
age=scan.nextInt();
}
公共空间显示()
{
System.out.println(序列号“+”。狗的名字是“+name+”,年龄是“+age+”\n”);
}
公共空总显示()
{
System.out.println(“动物总数=”+总数);
}
}
公猫
{
智力年龄;
字符串名;
int serial_no=1;
扫描仪扫描=新扫描仪(System.in);
public void get_name()
{   
System.out.println(“输入猫的名称:”);
name=scan.nextLine();
}
公共空间获取时间()
{
System.out.println(“输入猫的年龄:”);
age=scan.nextInt();
}
公共空间显示()
{
System.out.println(序列号+”。狗的名字是“+name+”,年龄是“+age);
}
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪扫描=新扫描仪(System.in);
int类型,计数=1;
宠物对象_1=新宠物();
pets.Dog Dog=object_1.new Dog();
pets.Cat Cat=object_1.new Cat();
System.out.println(“按1表示狗,按2表示猫,按3表示总数”);

而(count为了解决您的问题,您只需在类
Cat
和类
Dog
中的
get\u age()
方法中添加对类
Scanner
的方法
nextLine()
的调用

下面是class
Dog
中的整个
get_age()
方法以及所需的添加

public void get_age(){
System.out.println(“输入狗的年龄:”);
age=scan.nextInt();
scan.nextLine();//我添加了这一行。
}

您还应该发布正在实例化的对象的类定义。IDE显示存在资源泄漏。IDE告诉您需要
关闭(
扫描仪
)。您可以忽略这一点,因为您正在创建一个
扫描仪
,用于从stdin(标准输入,即键盘)读取数据而且你永远不应该关闭标准输入。你发布的代码不是。如果你发布类
Pets
的代码,这将帮助我帮助你。如果你使用它,其他人阅读你的代码也会容易得多。现在我已经附上了包含类定义的完整代码。现在请看一看