构造函数有没有返回值的总结

构造函数的返回值 鲜为人知的C++构造函数 阅读详情
这个问题已经有人讨论过,最近在Java版再次被人提出来了。

疑问在于如下的代码:
  1. String str = new String("content"); 
new 的时候调用构造函数,返回给str;


从语法上讲,构造函数不允许有返回值,就算是 void 也不行。

这里的new 是调用构造函数,在堆里分配了一个String对象,并让str指向这个对象。实际上是那个 new 在起作用,而不是()在起作用。

下面是因为原版说明,有兴趣的自己看吧
For purposes other than simple initialization, classes can have constructors. Constructors are blocks of statements that can be used to initialize an object before the reference to the object is returned by new. Constructors have the same name as the class they initialize. Like methods, they take zero or more arguments, but constructors are not methods and thus have no return type. Arguments, if any, are provided between the parentheses that follow the type name when the object is created with new. Constructors are invoked after the instance variables of a newly created object of the class have been assigned their default initial values and after their explicit initializers are executed.

We create the object sun refers to using new. The new construct is by far the most common way to create objects (we cover the other ways in Chapter 16). When you create an object with new, you specify the type of object you want to create and any arguments for its construction. The runtime system allocates enough space to store the fields of the object and initializes it in ways you will soon see. When initialization is complete, the runtime system returns a reference to the new object.


下面是构造方法的一些特点总结
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)构造方法不能由编程人员调用,而要系统调用。
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构  造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分。


当然
  1. public Long String(){ }
这个算一个普通的方法,虽然和类重名,但却是合法的普通方法,而不是构造方法了。

如下的类可以正常编译并运行,结果正确。请注意构造方法里面的return;
  1. public class T {
  2.   public T() {
  3.     return; // 请注意这里的return哦,这是合法的语句
  4.   }
  5.   public String T() {
  6.     return "特殊的方法,和类名相同";
  7.   }
  8.   public static void main(String[] args) {
  9.     System.out.println(new T().T());
  10.   }
  11. }

从另一个角度看,正是因为构造函数没有返回值才需要这么写:
  1. String str = new String("content"); 

否则,如果有返回值,应该如下写:
  1. String str = String("content"); 
当然了,那个String是一个普通的方法,不再是构造方法了。原因看前面的例子。



结论:
   构造函数/方法/构造器, 没有返回值。以后就别讨论这个了,呵呵。


讨论地址: http://topic.youkuaiyun.com/u/20080901/22/f44c4818-9a39-46c2-8a24-0e6dce9dc800.html
















<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
详解【计算机类&面试真题】军队文职考试——第7期:C盘格式化需要注意什么?| 两台笔记本连起来后ping不同,可能存在哪些问题?| 模拟信号到数字信号是如何转化的?| 计算机由哪些部件组成? 这是我分享的系列面试知识——军队文职(计算机类)面试真题详解(第7期)。本期分享:两台笔记本连起来后ping不同,你觉得可能存在哪些问题?模拟信号到数字信号是如何转化的?谈一谈计算机由哪些部件组成?如何加强计算机网络安全管理?若通过域名无法访问,而通过IP地址能访问。这是怎么回事?你将如何解决?谈一谈C盘格式化需要注意什么?开放类题目:如果应聘的岗位和你想的差距很远,你怎么办? 阅读详情

相关推荐

PCIE配置和地址空间

来源:https://www.jianshu.com/p/574e9a2cbc4e 每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念,那时的配置空间如下: 图6.1 整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Brid.

qq_28643619的博客 4064

JS:构造函数的返回值

构造函数的返回值

潮汐未见潮落的博客 3067

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 728

构造函数返回值问题

1、请问p.name是: var fun = function(){ this.name = 'ling'; return { name: 'ge' }; } var p = new fun(); 考察的是构造函数的返回值的问题, 每个函数都有返回值,如果使用了return语句,则返回return后跟的值,如果没有使用return,则默认返回undefined. 特别的,如果这个函数是构造函数,则默认返回this对象,如果构造函数内使用了return语句,并且retur

zhangqling的博客 1874

LoRa物联网实战:用新大陆模块打造智能LED呼吸灯(附完整代码解析)

本文详细介绍了如何利用新大陆LoRa模块实现工业级智能LED呼吸灯的设计与开发。通过256级PWM调制的呼吸灯效果,结合LoRa无线控制技术,实现设备状态的可视化反馈和多设备同步控制。文章包含完整的硬件选型、电路设计、算法优化和代码实现,特别适合物联网开发者和硬件工程师参考。

github5actions的博客 87

Warning-[INFL_DELTA] Too many events zero delay loop

项目场景: 运用VCS工具执行仿真的时候,遇到如下错误提示,但仿真还在继续。 Warning-[INFL_DELTA] Too many events Possible zero delay loop. Too many events in the simulation at time 0 fs. 问题描述: 为什么会有这个问题; 什么导致了这个问题; 原因分析: 1、为什么会有这个问题 由于竞争条件或编码风格不明确,可能会产生零延时回路,导致仿真挂起或仿真时间无限。 2、什么导致了这个问题 举

hh199203的博客 1万+

构造函数 返回值

1. 标准       2. 其实是有返回值的,返回this       也就是说       class foo{   foo(){   return;   }   };       其实等价于       class foo{   foo(){   return this;   }   };       3. 返回void  见2,当然不能写void在前

a5161027的博客 920

机器视觉应用工程师职位深度解析与面试指南

广东奥普特科技招聘机器视觉应用工程师,要求大专以上理工科专业背景,熟悉C/C++或PLC编程,具备自动化设备调试经验。岗位职责包括视觉项目方案评估、系统安装调试、售后技术支持及异常处理,需接受外派出差。该职位面向专业对口的应届生或实习生,强调动手能力、沟通技巧和吃苦耐劳精神。机器视觉工程师需掌握图像处理算法、硬件配置等核心技术,在工业自动化领域具有良好发展前景。求职者应注重编程能力和实践经验的积累,以胜任这一技术密集型岗位。

郑伟强dev的专栏 435

C++ 关于构造函数的返回值

构造函数确实隐式地返回了一个该类的对象。或许底层原理并非如此,但对于没有接触过底层的用户来说,这样去理解,我想是没什么大问题的。

Strange and romantic is the fate. 6844

OpenClaw-遇到的问题-Health check failed: gateway closed (1006 abnormal closure (no close frame)): no clos

OpenClaw网关服务安装成功但运行异常,显示健康检查失败(错误代码1006)。系统提供了Web控制界面(http://127.0.0.1:18789/)和带令牌的安全访问链接。文档建议参考故障排除指南,并提供了可选应用扩展功能(包括移动端支持)。注意运行本地代理存在安全风险,建议加固系统配置。若需启用网络搜索功能,需配置Brave搜索API密钥。安装完成后会自动打开仪表盘,需保持浏览器标签页以控制OpenClaw服务。

直到世界的尽头 1万+

【漏洞复现】CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞,攻击者可利用此漏洞执行任意代码。

渗透之路,攻防之间皆学问 6715

C++编程:函数的返回类型

所以C++中对主函数的返回值也有特殊的规定:即使返回类型不是void,主函数也可以省略return语句。最终返回的值,是str2的一个副本。而返回值是它的引用,相当于引用了一个不存在的对象,这可能会导致无法预料的问题。与形参的讨论类似,由于数组“不能拷贝”的特点,函数也无法直接返回一个数组。l ( * fun(int x) )[5]:函数返回结果解引用之后是一个长度为5的数组,说明返回类型是数组指针;如果函数返回一个类的对象,那么我们可以继续调用这个对象的成员函数,这样就形成了“链式调用”。

zjjcchina的博客 1457

手把手教你学PCIE(5.1)--pcie固件初始化的硬件初始化

PCIe 固件初始化的硬件初始化是一个复杂但至关重要的过程。通过正确配置 PCIe 控制器和相关硬件,可以确保系统的稳定性和性能。以上步骤和示例代码提供了一个基本的框架,实际开发中可能需要根据具体的硬件和需求进行调整和优化。

MHD0815的博客 1690

构造函数有没有返回值?

昨天面试,他问我:构造函数有没有返回值? 我告诉他说:构造函数没有返回值。  他举了个反例:    String str = new String("content");  new 的时候调用构造函数,返回给str;  再问:有没有方法确定知道构造函数有没有返回??   这是 上的说法:  For purposes other than simple initializ

菜鸟的飞翔 4万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JAVA中构造函数有没有返回值_【面试题】构造函数有没有返回值

曾经遇到一个面试题——构造函数有没有返回值?今天调查一番后,给出确切的答案:构造函数没有返回值。我们使用构造函数构造一个String字符串str:String str = new String("abc");这里的new 是调用构造函数,在堆里动态创建一个String对象,并让str指向这个对象。实际上赋值是因为new关键字,而不是()在起作用。从语法上讲,构造函数不允许有返回值,就算是 void...

weixin_29713915的博客 2135

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java构造函数有没有返回值的总结

这个问题已经有人讨论过,最近在Java版再次被人提出来了。 疑问在于如下的代码: String str = new String(content); new 的时候调用构造函数,返回给str; 从语法上讲,构造函数不允许有返回值,就算是 void 也不行。 这里的new 是调用构造函数,在堆里分配了一个String对象,并让str指向这个对象。实际上是那个 new 在起作用,而不是()在

HackProgramer的专栏 1708

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

构造函数之创建详细过程与到底有没有返回值

构造函数之创建详细过程与到底有没有返回值 构造方法与类同名,在没有构造函数的情况下,系统会给我们自动创建一个无参构造函数,只是我们看不到,当你创建了构造函数时,系统就不会给你创建无参构造函数。其主要作用分以下两种: 类的实列化,对象创建是通过构造方法实现的。 创建对象的同时,初始化实例变量的内存空间(给实例变量赋值)。 成员变量之实例变量(成员变量包括类变量和实例变量),属于对象级别的变量,这种变量必须先有对象才能有实例变量。实例变量没有手动赋值的时候,系统默认赋值,那么这个系统默认值是什么时候完成的呢

LUOHANG22的博客 634

Java构造函数到底有没有返回值?

Java构造函数到底有没有返回值?

xiaoguobaf的博客 2万+

构造函数有没有返回值

疑问在于如下的代码: String str = new String(content); new 的时候调用构造函数,返回给str; 从语法上讲,构造函数不允许有返回值,就算是 void 也不行。 这里的new 是调用构造函数,在堆里分配了一个String对象,并让str指向这个对象。实际上是那个 new 在起作用,而不是()在起作用。 下面是因为原版说明,有兴趣的自己看吧

Ada168855的专栏 1138

String str = new String("content") 构造函数有没有返回值?new关键字到底在对象初始化中做了什么?

看到String str = new String("content")时想到一个问题:在我印象里,构造函数时没有返回值的,那么创建的对象是如何赋值的呢?有没有方法确定知道构造函数有没有返回呢? 构造函数时没有返回值的,赋值因为new关键字。 new的内部是调用了一个叫void * operator new(size_t size)的函数,operator new和malloc类似,他向系统申...

Jeff_的博客 1509

构造函数析构函数为什么没有返回值?

构造函数析构函数为什么没有返回值? (Liupq 2008.5.10)构造函数和析构函数是两个非常特殊的函数:它们没有返回值.这与返回值为void的函数显然不同.后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许.在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行.如果它们有返回值,要么编译器必须知道如何处理返回值,...

教学 & 技术专栏 1万+

java的构造函数

构造函数也称为构造方法,其规则如下: 1、没有任何返回值类型(连void也没有,void其实也是一种返回值类型,只是返回值类型为空); 2、函数的名字和类名相同,一般用public修饰(public关键字是可以省略的。这里说一般是指一般情况,不包括特殊情况,如单例模式在内); 3、构造函数也是类的成员函数,其主要功能是给成员变量进行初始化; 4、创建对象的时候会隐式调用构...

aiguoxie5710的博客 118
上一篇: Java技术体验,HTTP多线程下载,端口侦听和自启动服务
下一篇: 使用Apache的代理,整合多个Tomcat
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值