有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么带有未初始化成员变量的类可以在java中编译?

这个问题是在一次测验中提出的。我想知道你是怎么想的

私有方法中使用的未初始化的局部成员变量(如b)

“为什么它是可编译的?”

编辑:

class Class
{
    private int a=0; // this is an initialized member variable and I knew already that c# & java initializes all variables but that was NOT the question.
    private int b; // to me this is an uninitialized member variable
    private void Method()
    {
        b++; //no compiler error here in java. and the question was why is that so?
    }
}

我不知道成员变量在java中称为属性。我更感兴趣的是你对这个问题的看法,我觉得这个问题很奇怪。当然,编译器设计者决定这样做,但问题是为什么这是可编译的?我想老师在质疑这个理由。但我不再问老师奇怪的问题。无论如何,谢谢你的回答


共 (3) 个答案

  1. # 1 楼答案

    我假设通过局部成员变量,你是指属性

    即使没有初始化,它也有明确定义的语义。对象将被初始化为null,数字将被初始化为0,布尔值将被初始化为false

    使用未分配的变量是否是一种好的做法是有争议的。从语言的角度来看,至少你没有未定义的行为

  2. # 2 楼答案

    未初始化的变量是“兼容的”,因为规范允许它,而且它是必要的,因为某些情况需要它。比如尝试一下…catch块,其中try catch内的变量必须在块外使用

        BufferedReader br = null;
    
            try {
    
                String sCurrentLine;
    
                br = new BufferedReader(new FileReader("C:\\testing.txt"));
    
                while ((sCurrentLine = br.readLine()) != null) {
                    System.out.println(sCurrentLine);
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (br != null)br.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
    //Do something with br