`
java2000.net
  • 浏览: 633099 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

阅读更多
这个问题已经有人讨论过,最近在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.csdn.net/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>
分享到:
评论

相关推荐

    深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

    用同一个类的源对象构造一个目标对象时,会调用拷贝构造函数来构造目标对象,如果没有定义拷贝构造函数,将调用类的默认拷贝函数来构造目标对象。2 . 当一个函数的返回值为一个类的对象时,如果在调用函数中,没有...

    C_C++问题总结

    3.11 在构造函数和析构函数中抛出异常会发生什么?什么是栈展开? 3.12 两种常用的实现隐式类类型转换的方式是什么?如何避免隐式类 型转换?3.13 STL中的vector:增减元素对迭代器的影响 3.14 STL中排序算法的实现 ...

    java基础补足和thinking In Java学习.rar

    JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名...2. this关键字在同一个类中可以调用构造函数,如:this()表示调用此类无参的构造函数

    零起点学通C++多媒体范例教学代码

    11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 12.1.1 复杂的继承和派生 12.1.2 继承和派生如何...

    零起点学通C++学习_多媒体范例教学代码

    11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator关键字进行转换 11.11什么可以重载,什么不可以重载 第12章 继承 12.1 什么是继承和派生 12.1.1 复杂的继承和派生 12.1.2 继承和...

    C++ 常量成员常量返回值详解

    1)常量数据成员,需要在构造函数列表中给出,构造函数中可以用常量赋值,也可以实例化的时候赋值。 2)赋值函数中不能赋值,起到保护常量数据成员的作用,和友元作用相反。 2.常量成员函数,形式:type funname...

    js数组操作学习总结

    shift:删除原数组第一项,并返回删除元素的值;...注:在IE6.0下测试返回值总为undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。 pop:

    C++11 Lambda表达汇总总结

    C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下: ...函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambda为止时Lamb

    Swift语言开发常见问题总结.docx

    这些技巧可以帮助开发者提高编码效率、写出更简洁、更安全的Swift代码: 函数式编程 柯里化(Currying):将一个多参数函数转换成一系列单参数函数链。 ...将函数作为参数或返回值传递,支持闭包。

    .NET中方法的注意事项总结

    本文较为详细的总结了.NET中方法的注意事项。分享给大家供大家参考。具体分析如下: 1. 方法中return 会终止整个方法段。...4.构造函数 不需要用void或者 int之类关键字修饰。 5.参数修饰符 params 表示可

    C#中委托的基本用法总结

    原则: 1、委托本质就是个指针,一个函数指针,拿到函数的首地址即可; C#的委托加了安全性,体现在对于函数指针所引用的函数指令块的类型检测,比如...这个赋值过程,就是委托的构造函数要做的事情,所以,委托的构造

    java方法总结(重载,构造方法,调用方法)

    在java中称为‘方法’,在C中称为‘函数’ java方法是语句的集合 用于执行一个功能 包含于类和对象中 可以被引用 方法的格式 访问权限 [修饰符] 返回值类型 方法名(参数列表){ ... 方法体 ... } 修饰符:修饰符...

    传智播客扫地僧视频讲义源码

    04_构造函数的调用(无参数和有参构造)_传智扫地僧 05_课堂答疑对象的初始化和对象的赋值是两个不同的概念 06_为什么需要构造和析构函数 07_copy构造函数的调用时机1和2 08_课堂答疑 09_copy构造函数调用时机3_传智...

    java面试题总结.docx

    重载指的是一个类中具有多个功能相似的函数。重写是指子类继承了父类的方法并且覆盖了子类的方法。 方法重载的规则: a.方法名一致,参数列表中的顺序,类型,个数不同 b.重载的方法与返回值无关 c.重载可以抛出不同...

    JavaScript王者归来part.1 总数2

     6.4.3 函数参数和函数返回值及其例子   6.4.4 高级用法--闭包作为局部域与延迟求值   6.5 高级抽象--Function类型和函数模版   6.5.1 动态创建函数--一个利用Function实现Lambda算子的例子   6.5.2 模式--...

    js数据类型检测总结

    constructor 构造函数 Object.prototype.toString.call() 原型链上的Object对象的toString方法 下面我们就来分别介绍一下上面四种方法的适用场景和局限性。 typeof 用来检测数据类型的运算符 使用typeof检测...

    java 面试题 总结

    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)...

    php-redis中的sort排序函数总结

    很多人把redis当成一种数据库,其实是利用redis来构造数据库的模型,有那种数据库的味道。但是在怎么构建还是key和value的关系,与真正的关系型数据库还是不一样的。 效率高,不方便;方便的,效率不高;又方便,...

    PHP3程序设计

    4.3.1 函数返回值 56 4.3.2 向函数传递参数 58 4.3.3 给函数赋予缺省值 59 4.3.4 控制变量的作用域 60 4.3.5 嵌套函数调用 61 4.3.6 递归函数 61 4.4 总结 65 第5章 中场一:数据库连接 67 5.1 开端 67 5.2 创建连接...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    5.3 从函数返回值 231 5.3.1 返回指针 231 5.3.2 返回引用 233 5.3.3 函数中的静态变量 236 5.4 递归函数调用 238 5.5 C++/CLI编程 240 5.5.1 接受数量可变实参的函数 241 5.5.2 main( )的实参 242 5.6 小...

Global site tag (gtag.js) - Google Analytics