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

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                这个问题已经有人讨论过,最近在Java版再次被人提出来了。

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


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

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

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

We create the object sun refers to using new. The new construct is byfar the most common way to create objects (we cover the other ways inChapter 16). When you create an object with new, you specify the typeof object you want to create and any arguments for its construction.The runtime system allocates enough space to store the fields of theobject 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.csdn.net/u/20080901/22/f44c4818-9a39-46c2-8a24-0e6dce9dc800.html
















<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

牛仔裤新的

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值