由于静态块用于以动态方式初始化静态数据成员,因此我有以下代码:
class Temp {
static int x;
static {
try {
x = System.in.read();
} catch (Exception e) {
//Do nothing
}
}
}
class Temp1 {
public static void main(String args[]) {
System.out.println(Temp.x);
}
}
class Temp2 {
public static void main(String args[]) {
System.out.println(Temp.x);
}
}
在运行Temp1,Temp2时,x的正常值应该是我从键盘输入的值,但无论我从键盘输入什么,我总是得到49和50。
我已经看到inputstream类的read()方法应该返回相同的。为什么它在每种情况下都会返回49和50?
答案 0 :(得分:4)
你问的直接问题并不是你应该在这里首先得到通知的,因为你所采取的方法是非常错误的:
System.in
是字节流)并将其存储为int
。main
方法。这没有任何意义:在该代码的任何意义上都不会“完成两次”。这个清单并非详尽无遗,这正是我现在想到的。
总而言之,您应该首先重新设计代码,以使基本方法理智,然后才尝试使其工作。
答案 1 :(得分:3)
我认为您对java类型感到困惑,输入流如何工作。
输入流的方法read()
读取下一个字节并返回它。字节不是文本或字符串。例如,如果键入1
,则返回49 - 字符1
的ASCII码。键入字符2
会使其返回50等。
如果您键入任意数量的字符,方法read()
仍将返回第一个字符的ASCII代码。我认为这就是你的观点行为中这种“奇怪”的原因。
你可能应该将输入流包装到BufferedInputStream
然后使用readLine()
方法,即
BufferedInputStream bis = new BufferedInputStream(in);
String s = bis.readLine();