【发布时间】:2018-06-29 23:06:34
【问题描述】:
我认为这是一个非常简单的问题,但这是我在过去几个月中多次遇到的问题。我在一个方法中创建了一个扫描仪,然后尝试关闭它,它总是给我一个错误。这次的错误是:
错误:无法从静态上下文 Scanner.close() 引用非静态方法 close();
public static void readArray(char[] arr){
String myMessage;
System.out.print("Input Message: ");
Scanner input = new Scanner(System.in);
myMessage = input.nextLine();// Read a line of message
for(int i = 0; i < myMessage.length(); i++){
arr[i] = myMessage.charAt(i);
}
Scanner.close();
}
现在我读到这是因为我试图从静态方法中调用扫描仪类?所以扫描仪看不到扫描仪类?如果是这样,我将来应该如何正确处理这样的事情?我应该在创建它的方法中导入扫描仪类还是需要做其他事情?
谢谢
【问题讨论】:
-
好吧,您不想关闭任何
Scanner,而是要关闭名为input的那个。因此它是input.close()。 -
正如 Izruo 所说。但是请注意,在整个程序中,只有一个 System.in 不是您自己打开的,并且一旦关闭就无法重新打开,因此您不应该在程序中间关闭它。这意味着,它的 Scanner 应该只构建一次,并且永远不会关闭。它应该建立在整个程序的最开始,可供程序的其余部分访问,并用于读取控制台输入。您不应该在 System.in 的辅助方法上创建扫描仪。
-
我不认为这与您引用 @D.B. 的内容重复。这与
Scanner的东西更相关。 -
@LAD - 实际上,它是重复的,但是...... dup 树有点乱,因为有些人将“非静态方法无法引用......”标记为“非静态变量不能被引用..."
-
@Stephen C 好的,这是有道理的。
标签: java compiler-errors java.util.scanner