在Java中使用静态块的意外输出

时间:2017-10-17 02:15:01

标签: java output static-block

我正在尝试执行此代码,但它每次都给我随机值:

输出:

Output

代码:

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);
    }
}

2 个答案:

答案 0 :(得分:1)

这些值不是随机的,它们是:

  

[...]来自输入流的下一个数据字节。值字节作为int返回,范围为0到255.如果没有字节可用,因为已到达流的末尾,则返回值-1。 http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read()

这意味着如果您输入a并点击Enter,您将获得97

如果您要查找键入的内容(而不是原始字节值),则需要进行一些更改...使用Scanner类的最简单方法。以下是获得数值的方法:

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

答案 1 :(得分:0)

这是因为它会返回您输入的第一个数字/字符的ASCII值。