Java 构造函数是否返回对象引用?

2024-03-05

我知道 Java 的构造函数不能有任何类型,有趣的是它甚至不能是void。对此的合理解释是构造函数返回初始化对象的引用。

MyClass myObject = new MyClass();

的构造函数myClass现在将在实例化对象后返回对象引用并将其保存在对象变量中MyObject这就是构造函数不能有返回类型的原因。

是对的吗?有人可以证实这一点吗?


不,实际上,构造函数被编译到类文件中就像具有名称的方法<init> and a void返回类型。 http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.9你可以看到这些"<init>"堆栈跟踪中的调用。表达方式new Type()被编译为指令new http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.new这只是创建了实例Type和一个附加方法调用(invokespecial http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokespecial) 到声明的构造函数之一Type.

验证者将确保在新创建的实例上恰好一次调用这种特殊方法,并且在对该对象进行任何其他使用之前调用它。

从 Java 语言的角度来看,让构造函数没有返回类型只是一种编程语言设计决定。毕竟,new Type(…) is计算结果为新创建的实例的表达式Type并且您无法使用该编程语言构造从构造函数获取返回值。此外,如果添加返回类型,Java 将无条件地假定它是一个方法,即使它与类同名。

这就是它的定义方式 http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8:(它使解析类定义更容易)

ConstructorDeclarator 中的 SimpleTypeName 必须是包含构造函数声明的类的简单名称,否则会发生编译时错误。

在所有其他方面,构造函数声明看起来就像没有结果的方法声明(第 8.4.5 节)。

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

Java 构造函数是否返回对象引用? 的相关文章

随机推荐

  • 为什么yield不能与scala中的while循环一起使用

    在斯卡拉中 yield可以使用 for 循环 例如 val ints IndexedSeq Int for i lt 1 to 10 yield i 但我发现yield不能使用 while 循环 例如喜欢 while resultSet n
  • React Native 地图 - 自定义标记图像在更高的 Android 版本中不渲染

    图像未显示在标记上 你好 我正在使用 React Native 开发一个 Android 应用程序 它使用反应本机地图 https github com react community react native maps包裹 除了 Andr
  • 编写可在 matlab 中读取的 3d numpy 数组

    我正在尝试将 3D numpy 数组保存到我的磁盘中 以便稍后可以在 matlab 中读取它 我在使用时遇到了一些困难numpy savetxt 在 3D 数组上 所以我的解决方案是首先使用以下代码将其转换为 1D 数组 import nu
  • Ksql:Left Join 显示流中的列,但不显示表

    我在 KSQL 中有一个蒸汽和一张表 如下所述 流名称 DEAL STREAM 表名称 EXPENSE TABLE 当我运行以下查询时 它仅显示流中的列 但不显示表列 这是预期的输出吗 如果不是 我做错了什么吗 SELECT TD EXPE
  • ASP.NET MVC razor 视图引擎默认编码 HTML 吗?

    ASP NET MVC razor 视图引擎默认编码 HTML 吗 或者我们必须使用htmlhelpers用于对数据进行 html 编码 是的 它确实 使用 Html Raw 打破这种行为
  • 在 IDLE 中运行 pip

    抱歉问这个愚蠢的问题 我是 python 新手 目前正在使用 IDLE 进行 python 编程 有没有办法隐藏命令生成的输出 pip main install modulename 我试图在idle中通过pip安装matplotlib 但
  • JavaScript:我可以以某种方式强类型函数参数吗?

    我是 JavaScript 新手 我觉得对我正在编码的几个工具的函数参数进行强类型化的需求是不可抗拒的 这将使我在这些函数中自动完成 调试 功能访问变得更加一致 经过一番谷歌搜索后 我想这不可能直接实现 但是 是否有通用工具可以简单地模拟这
  • 将通用数字参数与常量进行比较

    假设我有一个函数将数字参数与常量进行比较并返回布尔值 fn compare n f64 gt bool n gt 42 as f64 这工作正常 但我似乎无法使其通用 fn compare
  • 相当于 -respondsToSelector 的类方法:

    是否有一个类方法相当于 respondsToSelector 就像是 respondsToSelector 我问的原因是因为通过实施 respondsToSelector 在类级别上 我收到编译器警告 在协议中找到 respondsToSe
  • Java 中同步的记忆效应

    JSR 133 常见问题解答 http www cs umd edu users pugh java memoryModel jsr 133 faq html synchronization says 但同步还有更多内容 而不是相互排斥 同
  • webpack.config.js 中的 json-loader 不起作用

    我正在尝试遵循 React 教程 我的 webpack config js 文件如下 var webpack require webpack var pth require path module exports entry src ind
  • MySQL where 子句和 avg() 排序作为子查询

    尽管我可以对别名子查询进行分组和排序 但我无法在 where 子句中使用别名 我需要使用联接吗 Works SELECT entries SELECT avg value FROM ratings WHERE ratings entry i
  • Gradle InstrumentTest 的 AndroidManifest.xml

    有没有办法指定一个额外的AndroidManifest xmlgradle 测试应用程序的文件 我需要它来为我的单元测试指定额外的权限和活动 UPD 我尝试添加instrumnetTest部分中的build gradle文件 但它没有帮助
  • 使用SQL过滤存储过程的结果

    我查看了 Stack Overflow 上与此问题相关的其他问题 但似乎没有一个问题清楚地回答了这个问题 我们有一个名为 sp who2 的系统存储过程 它返回服务器上所有正在运行的进程的信息结果集 我想过滤存储过程返回的数据 从概念上讲
  • Google 脚本 JSON 嵌套数组到单元格

    我试图将以下 JSON 的一部分读入 google 表格 似乎有嵌套数组 我很难将其推入一个单元格 主要 JSON lineItems name advertisers 1558261 lineItems 12317016 advertis
  • Angular2:更改表单验证错误的边框颜色

    尝试更改错误消息的边框颜色 这是我的 html 代码 div class form group div
  • 从对话框片段上的图库中选择照片时光标上出现空指针异常

    我正在尝试从图库中选择照片DialogFragment 但我越来越nullpointerexception初始化时cursor 有什么想法为什么会出现此错误吗 下面是我的代码 if resultCode Activity RESULT OK
  • 连接图中的桥

    我有一个编程任务 不是家庭作业 我必须在图中找到桥梁 我自己做了一些工作 但无法想出任何令人满意的东西 所以我用谷歌搜索了它 我确实找到了一些东西 但我无法理解它所呈现的算法 有人可以看一下这段代码并给我一个解释吗 public Bridg
  • OpenCV - 两个二值图像之间的交集

    假设我有两个相同大小的二值图像 如何找到两个二值图像之间的交集 只有两个白色图像 灰色 255 上相同坐标 位置 的像素才会在输出图像 交集 上给出白色像素 您可以使用cvAnd http opencv itseez com modules
  • Java 构造函数是否返回对象引用?

    我知道 Java 的构造函数不能有任何类型 有趣的是它甚至不能是void 对此的合理解释是构造函数返回初始化对象的引用 MyClass myObject new MyClass 的构造函数myClass现在将在实例化对象后返回对象引用并将其