Java 静态内部类字段值(默认为0,为什么?)
运行以下代码时,k的值为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
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
类型的类变量具有默认值。