有 Java 编程相关的问题?

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

在java中使用之前初始化变量

我已经玩了一段时间这段代码,它让我困惑,为什么这个方法调用似乎返回一个数字,尽管它最初没有设置为0

public class MainProg {
    public static void main(String[] args) {
        FixedCapacitySizeOfStrings s = new FixedCapacitySizeOfStrings(3);
        System.out.println("(" + s.size() + " left on stack)");

    }
}

这是API代码

public class FixedCapacitySizeOfStrings {
    private String[] a;
    private int N;  

    public FixedCapacitySizeOfStrings(int cap) {
        a = new String[cap];
    }

    public boolean isEmpty() {
        return N == 0;
    }

    public int size() {
        return N;  //why is this line doing the right thing?? N was never initialized to 0
    }

    public void push(String item) {
        a[N++] = item;
    }

    public String pop() {
        return a[--N];
    }
}

共 (3) 个答案

  1. # 1 楼答案

    基本实例变量默认初始化为0。这包括intlongdoublefloatshortbytechar。(所有非基本实例变量都初始化为null

    请注意,这只是关于实例变量(字段)——局部变量没有初始化

  2. # 2 楼答案

    在方法内部时,必须显式初始化变量。在方法0之外,默认值整数被隐式初始化为

    因此,即使整数N没有在FixedCapacitySizeOfStrings内赋值,它的值在声明为实例变量(类变量)时隐式为零

    然而,您的测试用例会抱怨,因为整数s没有显式设置为任何值,而是在方法中声明的

  3. # 3 楼答案

    它给出了s.size()=0,因为N是实例变量,并且正如您所知,如果您想更正该值,那么将其写入为

    公共int size(){

        return N=a.length;
             }
    

    上面给出了正确的结果