是否必须关闭扫描仪?

Dil*_*eep 5 java java.util.scanner

使用下面的代码,我可以使用/不使用扫描仪关闭方法生成相同的输出.

import java.util.Scanner;
class CheckPassFail
{
    //Write a program called CheckPassFail which prints "PASS" if the int variable "mark" is more than or equal to 50; or prints "FAIL" otherwise.
    static int k;
    static String str;
    public static void main(String arg[])
    {
        System.out.println("Enter the marks : ");
        Scanner typein = new Scanner(System.in);
        str = typein.nextLine();
        typein.close();                             //Scanner Close
        k = Integer.parseInt(str);
        if(k>=50)
        {
            System.out.println("PASS");
        }
        else
        {
            System.out.println("FAIL");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 5

简短的回答:,但在许多情况下,这样做是非常明智的.

扫描仪可以处理某种资源.这可以是a String,但在许多情况下,它可以是标准输入通道,文件,网络流或其他资源.

因为stdin,这不是什么大问题.在stdin正常生活(和模具)与您的应用程序.最好不要关闭流,因为可能另一个对象有兴趣从标准输入通道读取.

但是,如果您从files/network/driver /中读取...这意味着Java首先询问操作系统是否可以使用该资源.这意味着资源已分配给应用程序.其他希望写入文件的应用程序(或者在程序写入文件时读取和写入)是(至少是临时的)拒绝访问该资源.因此,尽快放弃资源是有意义的.

然而,最后一个方面并没有义务.Java虚拟机将在终止/垃圾收集器通过时关闭程序不再可访问的资源.此外,如果您的Java应用程序被您,另一个程序杀死(终止),操作系统肯定会释放资源......

然而,尽快放弃资源是礼貌的(不要太过于字面意思,如果你在几秒钟后释放它们,这不是一个大问题).此外,不及早放弃资源会使系统陷入僵局活锁.在死锁的情况下,两个程序正在等待资源在保持其他资源时再次可用.由于没有一个程序放弃自己的资源,程序将永远等待.如果发生这种情况,系统会卡住.

最后,活动资源也会导致额外的内存/ CPU使用量.在所有操作系统管理这些资源之后,因此可以合理地假设要管理它们,它们将使用少量的CPU.在许多情况下,活动文件(部分)加载到内存中.对于网络资源也是如此,......总的来说,足迹并不是很大,但你可以想象如果所有程序在资源终止之前都会保留资源,这会产生很大的影响.