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

这个问题已经有人讨论过,最近在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"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
华为S5700三层交换机VLAN配置避坑指南:为什么你的VLAN间无法互通? 本文针对华为S5700三层交换机VLAN间无法互通的典型故障,提供深度排障指南。文章从数据转发原理入手,系统梳理了从物理链路、VLAN配置、VLANIF接口状态、路由表到ARP表、MTU及安全策略等全链路检查点,并给出了清晰的排查命令与流程,帮助网络工程师快速定位并解决VLAN间路由问题,实现稳定互通。 阅读详情

相关推荐

3D视觉入门必看:深度图、点云图、IR图、RGB图像到底有什么区别?

本文深入解析了3D视觉中深度图、点云图、IR图与RGB图像的核心区别。深度图记录像素距离,是连接2D与3D的桥梁;点云图是显式的三维坐标集合;IR图感知红外光强度;RGB图像则提供颜色纹理。理解其信息维度和应用场景,是进行机器人导航、三维重建等任务的基础。

year5的博客 348

JS:构造函数的返回值

构造函数的返回值

潮汐未见潮落的博客 3067

Mcgs 屏幕Modbus RTU通讯调试

昆仑通态屏幕作为Modbus Master 与 Modbus Slave通过RS485接口实现通信的调试记录

madao1234的博客 5575

构造函数返回值问题

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

天池长期赛:二手车价格预测(422方案分享)

本次比赛是一次很好的锻炼数据挖掘能力的入门赛,从EDA-数据清洗-特征工程-模型调参-模型融合,能够完整的学习到大数据的分析和挖掘,值得历练。

weixin_46685991的博客 1万+

海康威视摄像头CVE-2017-7921漏洞复现:从零到一的实战指南(含解密工具下载)

本文详细解析了海康威视摄像头CVE-2017-7921漏洞的技术原理与复现方法,提供从环境搭建到实战利用的完整指南。通过认证绕过漏洞,攻击者可获取敏感信息并执行高权限操作,文章还包含解密工具下载与防御建议,助力安全研究人员深入理解物联网设备安全风险。

weixin_29325515的博客 815

构造函数 返回值

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

a5161027的博客 920

[企业AI落地] RAG 知识库系统在多租户环境下的细粒度权限隔离设计

多租户 RAG 系统真正的风险不只是搜不到,而是把不该看到的内容查出来、说出来、写回去。本文结合多客户售后知识助手场景,用元数据结构、向量检索过滤、回答策略和审计回写示例拆解租户、资源、检索、生成、审计五层权限边界。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 223

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

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

Strange and romantic is the fate. 6844

RK3588开发板NPU加速YOLO目标检测完整实战教程

🚀 RK3588开发板NPU加速YOLO目标检测实战 本文详细介绍了如何在瑞芯微RK3588开发板上利用内置NPU加速YOLO目标检测的全流程: 1️⃣ 环境准备:配置RKNPU2 SDK和aarch64交叉编译器,搭建Ubuntu开发环境 2️⃣ 模型转换:从ONNX格式转换为专用RKNN模型,适配NPU硬件特性 3️⃣ 性能对比:NPU推理将处理时间从833ms降至50ms以下,帧率提升16倍 4️⃣ 实战应用:支持图像/视频流/摄像头实时检测,提供完整编译和运行命令 关键优势:专为边缘AI设计的6T

FJN110的博客 931

Android 11多窗口+分屏+APP窗口嵌套TaskView实现原理一

然而随着版本的迭代升级,google对分屏的定制差异化也越来越大,Androd 11的分屏用的是split-screen-primary和split-screen-secondary的方式,在systemui中去实现的,其定制化的灵活度不是很高,很多业务都是放到sustemui或者fw去实现,但是随着版本的升高,后面出现了TaskView来替代了老版本的分屏方式,但是Task的核心原理其实和之前的方式是一样的,TaskView来实现分屏。

qq_18420641的博客 2617

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

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

zjjcchina的博客 1457

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

构造函数有没有返回值?

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

菜鸟的飞翔 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

weixin_29713915的博客 2135

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

HackProgramer的专栏 1708

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

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

LUOHANG22的博客 634

构造函数有没有返回值

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

Ada168855的专栏 1138

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

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

xiaoguobaf的博客 2万+

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
上一篇: 网友面试心得的总结
下一篇: 使用Apache的代理,整合多个Tomcat
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值