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