默认构造函数不初始化类的实例成员?

2024-04-21

我遇到了一个问题 “关于‘默认’构造函数,以下哪一项是正确的?”

和一个选项 “它初始化类的实例成员。” 是错误的选择。

现在我的理解是,如果我们有这样的代码

    Class Test {
        String name;
    }

然后编译器创建默认构造函数,如下所示

    Class Test {
        String name;
        Test(){
            super();
            name = null;
        }
    }

默认构造函数不是初始化实例成员 name=null 吗?


类构造函数不是进行初始化的,而是 JVM 执行此操作.

为对象分配内存后,对象的成员默认初始化为某个可预测的值,该值成为它们的默认值。这一切都完成了before构造函数被调用!

根据规格 http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5

  • 每个类变量、实例变量或数组组件在创建时都会使用默认值进行初始化(§15.9 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.9, §15.10.2 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.10.2):
  • 对于 byte 类型,默认值为零,即(byte)0.
  • 对于short类型,默认值为零,即(short)0.
  • 对于 int 类型,默认值为零,即0.
  • 对于 long 类型,默认值为零,即0L.
  • 对于 float 类型,默认值为正零,即0.0f.
  • 对于 double 类型,默认值为正零,即0.0d.
  • 对于 char 类型,默认值为空字符,即'\u0000'.
  • 对于布尔类型,默认值为false.
  • 对于所有参考类型(§4.3 http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.3),默认值为null.

您的假设很接近,但事实是,在评估构造函数参数之前,甚至在为每个字段分配值之前 - 这些字段已经保存了它们的默认值,这是由 JVM 完成的。

阅读小节§15.9.4 http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.9.4了解初始化过程是如何进行的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认构造函数不初始化类的实例成员? 的相关文章

随机推荐

  • -webkit-flex 在 Android 上无法正常显示

    认识到自己的奇妙能力后display flex 我制作了一个网页 在 Windows 上的 Chrome 26 中查看时 该网页看起来完全符合我的要求 但是 它在我的 Android 上的 Chrome 26 中不起作用 在我的模拟器中的
  • 如果 python 迭代器返回可迭代对象,我如何将这些对象链接到一个大迭代器中?

    我将在这里给出一个简化的例子 假设我在 python 中有一个迭代器 并且该迭代器返回的每个对象本身都是可迭代的 我想获取此迭代器返回的所有对象并将它们链接在一起形成一个长迭代器 是否有一个标准实用程序可以实现这一点 这是一个人为的例子 x
  • jquery datatables - 从 json 获取列

    In jquery Datatables is it possible to define columns with a server side script I need something like this 必须从服务器加载带有日期的
  • Elasticsearch 中的分析器有什么用?

    我在理解弹性搜索分析器时遇到一些问题 它的用途是什么以及如何使用它 From 本文 https www elastic co blog found text analysis part 1 有来自源文本的分词器和分词过滤器 我是否无法理解来
  • PlaceHolder 和

    在 ASP NET 项目中 我有以下 HTML
  • GKE 集群无法从同一项目(GitLab Kubernetes 集成)中的 GCR 注册表中提取 (ErrImagePull):为什么?

    因此 在谷歌搜索了一下之后 被那些在 Pull Secrets 方面遇到麻烦的人污染了 我将其发布在这里 以及 GCP 支持 据我所知将更新 我通过 GitLab Kubernetes 集成创建了一个集群 文档 https about gi
  • Windows Phone 7 支持动态关键字吗?

    Silverlight 4 添加了对动态关键字的支持 Windows Phone 7支持也支持吗 我遇到编译错误 并且无法在网络上找到任何说明是否支持一种方式或另一种方式的来源 编译错误 命名空间 System 中不存在类型或命名空间名称
  • 有没有 Android Drawable 设计师?

    我想在我的 Android 应用程序中使用更多矢量图 提供图像并不像我希望的那样节省空间或可扩展 Android提供了一系列可绘制文件格式 http developer android com guide topics resources
  • 更新android asset文件夹中的json文件

    我使用保存在我的 Android 应用程序的资产文件夹中的 html 文件中的谷歌图表来可视化我的应用程序的数据 html 文件被加载到 android WebView 中 我使用 Firebase Cloud Messaging 以静默方
  • 如何检测Python代码中的内存泄漏?

    我对机器学习和Python都是新手 我希望我的代码能够预测对象 在我的例子中主要是汽车 当我启动脚本时 它运行顺利 但在 20 张左右的图片之后 由于内存泄漏 它挂起了我的系统 我希望这个脚本运行到我的整个数据库 其中包含超过 20 张图片
  • 通过 Jmeter 从 Phantomjs 收集客户端性能指标

    在整个 PhantonJS 驱动程序配置中 我们有什么方法可以通过 phantomjs 使用 Jmeter DomLoad WindLoad ResourceCount 资源大小来捕获以下客户端性能指标 Thanks 我建议使用捕获指标WD
  • 为什么我会收到此 AttributeError ? (python3、pygame)

    以下是我收到的错误和我编写的代码 我知道有人问过类似的问题 但他们给出的解决方案与本案无关 我似乎无法弄清楚为什么会收到此属性错误 我正在运行 python 3 3 和 pygame 我使用的操作系统是ubuntu 12 10 我希望有人能
  • 如何使用 Box> 的地图?

    我有一段代码如下 fn stream it self gt Box
  • 如何检查 iOS 用户设备上是否安装了特定应用程序? [复制]

    这个问题在这里已经有答案了 是否有一个功能可以用来检查用户的设备上是否安装了特定的应用程序 即 Instagram class func isAppInstalled appName String gt Bool let appScheme
  • 如何将电子邮件从 Outlook 拖放到 .NET 应用程序中?

    我正在尝试弄清楚如何将电子邮件从 Outlook 2010 拖放到我的 NET 应用程序中 我看过很多文章 大多数都有非常复杂的解决方案 我的想法是它不应该那么复杂 但我可能是错的 任何帮助将非常感激 这里发布了一个更简单的解决方案 从 O
  • JBoss 7 MySQL 数据源问题

    我正在尝试在 JBOSS 7 中创建数据源 我的standalone xml摘录
  • 在 NAnt 构建脚本中处理密码

    有没有办法在 NAnt 构建期间提示用户输入 我想执行需要密码的命令 但我不想将密码放入构建脚本中 我现在正在使用脚本 但我很想听听是否有可用的预构建方法 非常感谢 sundar 的 ForegroundColor 技巧 我不确定你使用 P
  • 使用 MYsql 5.6 内存缓存

    我想我一定错过了一些非常明显的东西 但我想做的是使用 MySQL 5 6 并通过 memcache 返回值 所以我已经设置MYSQL来使用memcache插件 在innodb memcache containers表中设置详细信息 我现在该
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 默认构造函数不初始化类的实例成员?

    我遇到了一个问题 关于 默认 构造函数 以下哪一项是正确的 和一个选项 它初始化类的实例成员 是错误的选择 现在我的理解是 如果我们有这样的代码 Class Test String name 然后编译器创建默认构造函数 如下所示 Class