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 构造函数是否返回对象引用? 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 为什么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现在将在实例化对象后返回对象引用并将其