Java 静态内部类字段值(默认为0,为什么?)

Java 静态内部类字段值(默认为0,为什么?),java,Java,运行以下代码时,k的值为0: public class Main { public static void main(String[] args) { A.Inner1 inner1_2 = new A.Inner1(); System.out.println(inner1_2.getK()); } } class A{ private int j; public static class Inner1{ pri

运行以下代码时,k的值为0:

public class Main {
    public static void main(String[] args) {
        A.Inner1 inner1_2 = new A.Inner1();

        System.out.println(inner1_2.getK());
    }
}

class A{
    private int j;
    public static class Inner1{
        private static int k;

        public int getK() {
            System.out.println("value:" + k);
            return k;
        }

        public void setK(int k) {
            this.k = k;
        }
    }
}

value:0
0
Jdk 1.8_181

这是我的comlier错误还是jvm错误?
我找不到答案,这是因为整数初始化时默认值为零。在本例中,您的
k
变量从未被赋值,因此当它返回时,将返回默认值(0)。

这是因为整数初始化时默认值为零。在本例中,您的
k
变量从未被赋值,因此当它返回时,将返回默认值(0)。

当您写入
私有静态int k指定给整数
k
的值默认设置为0,并且您从未在代码中更改该值,因此它将输出0。

当您编写
私有静态int k时,每个都有一个so指定给整数
k
的值默认设置为0,并且您从未在代码中更改该值,因此它将输出0。

这不是错误,这是意料之中的

根据语言规范:

每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9、§15.10.2):

  • 对于int类型,默认值为零,即0

k
是一个类变量,您没有显式地给它一个值,因此您将读取它的默认值。

这不是一个错误,这是意料之中的

根据语言规范:

每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9、§15.10.2):

  • 对于int类型,默认值为零,即0

k
是一个类变量,您没有显式地给它一个值,因此您将读取它的默认值。

k的值是0。。。你为什么期望它不是零呢?
int
fiield是用默认值
0
初始化的,你从来不会更改它,所以这一切都是正常的。似乎
k
不是你手动初始化的。每当您将
int
作为字段时,当它包含的对象被实例化时,它的值将自动初始化为0。您希望
k
具有什么值?你认为输出应该是什么?k的值是0。。。你为什么期望它不是零呢?
int
fiield是用默认值
0
初始化的,你从来不会更改它,所以这一切都是正常的。似乎
k
不是你手动初始化的。每当您将
int
作为字段时,当它包含的对象被实例化时,它的值将自动初始化为0。您希望
k
具有什么值?您认为输出应该是什么?它不仅仅是基本类型。引用类型的变量也有一个默认值,即
null
@AndyTurner correct,我从来没有说过任何关于引用类型的内容,因为我们在这里讨论的是
int
,这是一种基本类型,但感谢您指出。我的观点是,“每个基本类型都有一个默认值”不必要地用“primitive”。它不仅仅是primitive类型。引用类型的变量也有一个默认值,即
null
@AndyTurner correct,我从来没有说过任何关于引用类型的内容,因为我们在这里讨论的是
int
这是一种基本类型,但感谢您指出它。我的观点是”每个基元类型都有一个默认值“不必要地限定为”基元“。如果使用局部整数,如
int j,则说整数初始化为默认值并不十分准确int
类型的类变量有一个默认值。如果您使用一个局部整数,例如
int j,那么说整数以默认值初始化是不太准确的int
类型的类变量具有默认值。