Java 中使用静态块的意外输出
Unexpected output using static block in Java
我正在尝试执行这段代码,但它每次都会给我随机值:
输出:
代码:
public class Temp {
static int x;
static {
try {
x = System.in.read();
} catch (IOException ex) {
System.out.println(ex);
}
}
}
class TempA {
public static void main(String[] args) {
System.out.println(Temp.x);
}
}
这是因为它会返回您输入的第一个 digit/character 的 ASCII
值。
值不是随机的,它们是:
[...] the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()
这意味着如果您键入 a
并点击 Enter
,您将得到 97
。
如果您要查找键入的内容(而不是原始字节值),则需要进行一些更改...最简单的方法是使用 Scanner
class.以下是获取数值的方法:
import java.util.Scanner;
public class Temp {
static int x;
static {
Scanner sc = new Scanner(System.in);
x = sc.nextInt();
}
}
class TempA {
public static void main(String[] args) {
System.out.println(Temp.x);
}
}
另见 System.in.read() method。
我正在尝试执行这段代码,但它每次都会给我随机值:
输出:
代码:
public class Temp {
static int x;
static {
try {
x = System.in.read();
} catch (IOException ex) {
System.out.println(ex);
}
}
}
class TempA {
public static void main(String[] args) {
System.out.println(Temp.x);
}
}
这是因为它会返回您输入的第一个 digit/character 的 ASCII
值。
值不是随机的,它们是:
[...] the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()
这意味着如果您键入 a
并点击 Enter
,您将得到 97
。
如果您要查找键入的内容(而不是原始字节值),则需要进行一些更改...最简单的方法是使用 Scanner
class.以下是获取数值的方法:
import java.util.Scanner;
public class Temp {
static int x;
static {
Scanner sc = new Scanner(System.in);
x = sc.nextInt();
}
}
class TempA {
public static void main(String[] args) {
System.out.println(Temp.x);
}
}
另见 System.in.read() method。