日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA——Scanner类绑定System.in后调用close()方法所引发的错误及其解决方案

發布時間:2024/10/5 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA——Scanner类绑定System.in后调用close()方法所引发的错误及其解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本概念

Java通過系統類System實現標準輸入/輸出的功能

通過實例化Scanner類的方式實現從鍵盤的數據輸入

問題描述

錯誤示例一:

import java.util.Scanner;public class CloseTest {public static void main(String[] args){Scanner in = new Scanner(System.in);int a = in.nextInt();System.out.println(a);in.close();Scanner in_2 = new Scanner(System.in);int b = in_2.nextInt();System.out.println(b);in_2.close();} }

輸入1后的結果:1

Exception in thread "main" java.util.NoSuchElementExceptionat java.util.Scanner.throwFor(Scanner.java:862)at java.util.Scanner.next(Scanner.java:1485)at java.util.Scanner.nextInt(Scanner.java:2117)at java.util.Scanner.nextInt(Scanner.java:2076)at test.CloseTest.main(CloseTest.java:13)

錯誤示例二:?

?錯誤示例三:

19行的注釋去掉后運行時第22行就會報錯

問題分析

錯誤示例一為例:

在創建Scanner類對象in后,實現了輸入,試圖調用close方法關閉輸入流,再創建一個新的Scanner對象,

在int b = in_2.nextInt();一句出現錯誤。

這是因為創建的in和in_2對象都是有System.in封裝而來的,雖然是兩個獨立的對象,但是用的是同一個輸入流

補充:System.inin于是一個final類型,它一旦被初始化就不能被改變。所以,不過你后面創建多少個Scanner類對象,其實都是返回同一個InputStream流。也就是說,每一次賦給新對象的地址是同一個

在調用in.close()實際上相當于System.in.close()

對于創建的in_2來說,System.in已經被關閉了。

補充:Scanner類的close()方法會關閉其綁定的輸入流。

即:一旦關閉 System.in 流時,后面的對象所用的 System.in 流就是關閉狀態。而?System.in?一個final類型,無法獲取一個新的 System.in?流

驚喜就會產生!若是不注意可能寫了很多代碼后才報錯,這樣就很難找到真正的錯誤點。

當然也可以通過反編譯查看調用情況。

?對于錯誤示例三:console對象綁定的輸入流即?System.in ,但是?System.in 已經關閉,導致拋出異常。

解決方案

方法一:

在所有其他的類中不使用使用close()方法

然后在包含主函數的類中創建Scanner對象,在代碼的最后調用close()

?

參考文章

https://www.cnblogs.com/caoshuiping/p/11286265.html

https://blog.csdn.net/qq_35029061/article/details/85525157

https://blog.csdn.net/daiidai/article/details/80716312

http://www.imooc.com/wenda/detail/569103

https://blog.csdn.net/biao_suki/article/details/45357425

總結

以上是生活随笔為你收集整理的JAVA——Scanner类绑定System.in后调用close()方法所引发的错误及其解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。