当前位置: 首页 > 知识库问答 >
问题:

静态内部类字段值(默认为0,为什么?)[重复]

宇文梓
2023-03-14

运行以下代码时,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错误?我找不到答案

共有3个答案

商飞尘
2023-03-14

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

范福
2023-03-14

每个基元类型都有一个默认值,所以当你编写私有静态int k;时,分配给整数k的值默认设置为0,并且你从未在代码中更改过该值,因此它将输出0...

张照
2023-03-14

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

从语言规范中,“变量的初始值”:

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

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

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

 类似资料:
  • 问题内容: 虽然无法使用来访问静态字段,但是如果我想记录一些应该是静态的内容(例如,创建的InnerClass对象的数量),则使该字段静态化将很有帮助。那么,为什么 Java禁止内部类中的静态字段/方法呢? 编辑:我知道如何使编译器对静态嵌套类(或静态内部类)感到满意,但是我想知道的是为什么Java禁止从语言设计和内部类(或普通内部类)内部的静态字段/方法实施方面,如果有人对此有更多了解。 问题答

  • 根据JLS: 内部类是不是显式或隐式声明为静态的嵌套类。内部类不能声明静态初始值设定项或成员接口。 但我下面的代码编译成功。 有人能帮我理解这种行为吗

  • Spring留档指出: “如果最后两段代码实际上存在于同一个应用程序中,那么可以删除两个RowMapper匿名内部类中存在的重复,并将其提取到单个类(通常是静态内部类)中,然后根据需要由DAO方法引用。” 本例中的“最后两个片段”是使用两个具有相同逻辑的行映射器映射其调用结果的数据库方法。 我的问题是为什么内部RowMapper类需要是静态的。。。还是一定要这样?我的DAO中有一个自动连接的服务方

  • 我有一个题目里提到的问题。 输入字段的类型为Number。 th:字段引用数据库中的int属性。 我希望我的占位符是可见的,而不是默认的0值。

  • 问题内容: 我知道创建一个非静态内部类对象需要一个外部类对象,而创建的非静态内部类对象会自动具有对该外部类对象的隐藏引用。但是为什么非静态内部类不能具有静态成员呢?Java设计人员只需要禁止在内部类的静态方法内访问非静态外部类字段,这样做会更有意义,不是吗? 如果在内部类中具有静态成员没有意义,那么为什么内部类可以通过继承具有静态成员的类来继承静态成员? 我也读了这篇文章。如前所述: 内部类可以继

  • 我想为 Go 中的结构字段分配默认值。我不确定这是否可能,但在创建/初始化结构的对象时,如果我不为字段分配任何值,我希望它从默认值分配。知道如何实现它吗?