首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的超类的字段在这里被初始化?

这个问题是关于Java编程语言中的类和对象初始化的问题。在Java中,当一个类被加载时,它的静态字段会被初始化,而实例字段则在创建类的对象时被初始化。如果你在子类中没有看到超类的字段被初始化,可能是因为这些字段是静态的,或者它们在超类的构造函数中被初始化。

以下是一些可能的原因和解决方案:

  1. 静态字段:如果超类的字段是静态的,那么它们会在类被加载时被初始化。这意味着,当你创建第一个类的对象时,静态字段会被初始化。如果你没有看到这些字段被初始化,可能是因为你还没有创建任何对象。
  2. 构造函数中的初始化:在Java中,构造函数是用于初始化对象的。如果超类的字段在超类的构造函数中被初始化,那么这些字段将在创建对象时被初始化。如果你没有看到这些字段被初始化,可能是因为你还没有创建任何对象。
  3. 子类构造函数:如果子类有自己的构造函数,那么超类的构造函数可能不会被调用,从而导致超类的字段没有被初始化。为了解决这个问题,你可以在子类的构造函数中显式调用超类的构造函数,例如:super();
  4. 初始化顺序:如果你的类有多个构造函数,并且它们调用了不同的超类构造函数,那么初始化顺序可能会导致问题。为了解决这个问题,你可以确保所有构造函数都调用相同的超类构造函数,或者使用初始化块来确保字段被正确初始化。

总之,如果你在子类中看不到超类的字段被初始化,可能是因为这些字段是静态的,或者它们在超类的构造函数中被初始化。你可以检查你的代码,确保你正确地调用了超类的构造函数,并且在初始化顺序方面没有问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Java常量池解析与字符串intern简介

    在Java应用程序运行时,Java虚拟机会保存一份内部的运行时常量池,它区别于class文件的常量池,是class文件常量池映射到虚拟机中的数据结构。 关于class文件常量池的部分可以参考之前的博文实例探索Class文件。 1.CONSTANT_Class入口解析 数组类的符号解析较为特殊。若是基本类型数组,那么虚拟机将创建该基本类型的新数组类,并创建一个Class实例来代表该类型,数组类的定义类加载器为 启动类加载器。若是引用类型的数组,那么在此之前还会进行引用类型的解析,数组类的定义类加载器为引用类型的定义类加载器。 非数组类和接口的的解析将经历以下步骤: (1).加载该类型和其所有的超类型 如果该类型在此之前已经装载到了虚拟机的当前命名空间,那么直接使用已经被装载的类型即可,否则由引用的发起类的初始类加载器进行加载。对目标类型的超类 的加载必然是在对当前类型加载完的基础上进行的,因为只有加载完当前类型,才能从class文件的super_class域找到其直接超类的符号引用,再 递归进行解析和加载,直至java.lang.Object类。而在递归返回的过程中,会检查interfaces域以查看实现或扩展了哪些接口,并再次 递归遍历对接口的符号引用。 (2).检查访问权限 随后是对目标类型的连接和初始化,这样才可以正常使用该类型。前面提到,对目标类型的初始化需要其所有超类都必须进行初始化(超接口不是必须的),并且, 由于已经对其超类进行了加载,所以不必再依赖于自该类向Object类的解析顺序,而是从Object类向该类进行初始化。类型的连接和初始化步骤如下: (3).类型校验 (4).类型准备 (5).类型解析(可推迟) 注意该过程是对被引用类型及其超类的符号引用的解析,因为对于被引用类型的某些符号引用不会立刻用到,故该步骤之前是严格意义上属于发起引用的类型的符号 解析的过程。只有在主动使用被引用类型的这些符号引用所指向的类型时,才会对这些符号引用进行解析,对其所指向的类型进行装载、连接和初始化。 (6).类型初始化

    02

    Bukkit NMS 开发实践 —— 创建你自己的自定义实体(适用于 1.16.3 – 1.16.5 版本)

    NMS 是 net.minecraft.server 包的简写,是 CraftBukkit 服务端及其下游服务端的底层实现,其代码包含 Mojang 发布的 Vanilla 服务端代码和 SpigotMC 添加的、用于与 BukkitAPI 进行交互的代码。在开发者无法借助 BukkitAPI 完成所需要的功能时,开发者我常常使用 NMS 进行开发。NMS 开发是底层行为,同时跨版本兼容性较差,除非必须使用,否则还请尽量使用 BukkitAPI。NMS 仅存在于编译后的服务端内部,不属于 BukkitAPI 内容。各版本的 NMS 包名一般均为 net.minecraft.server.v版_本_R号,如 net.minecraft.server.v1_16_R3。NMS 包内为扁平结构,没有二级包。NMS 包内类名为 Spigot 定义的反混淆名;方法、字段名一部分为 Spigot 定义的反混淆名,一部分为原混淆名;方法参数名一般为原混淆名。本教程旨在教授 Bukkit 开发者以 NMS 使用方法,拓展 Bukkit 开发者的开发视野。

    02
    领券