`
逆风的香1314
  • 浏览: 1419594 次
  • 性别: 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>
分享到:
评论

相关推荐

    python使用threading获取线程函数返回值的实现方法

    `MyThread`类的构造函数接受一个可选参数`func_list`,这是一个列表,每个元素是一个包含`func`(函数引用)和`args`(函数参数)的字典。`start`方法负责启动线程,通过遍历`func_list`,为每个函数创建一个新的`...

    一起学C#:构造函数和析构函数.rar

    3. **无返回值**:构造函数不同于普通方法,它不能有任何返回值,因此在定义时不应包含`return`语句。 4. **自动调用**:当使用`new`关键字创建类的实例时,编译器会自动调用相应的构造函数。如果类中没有定义构造...

    函数参数与返回值PPT课件.pptx

    或者return语句后面没有表达式,则返回值为默认类型的默认值(如int为0,自定义类型为默认构造函数创建的对象)• 注意:函数返回值类型不能是void,因为void表示无返回值,不能用于存储值第 17 页 / 共 33 页函数...

    C++拷贝构造函数和赋值操作

    拷贝构造函数主要关注的是创建新对象时的初始化,而赋值操作则侧重于更新已有对象的状态。在实际编程中,正确理解和实现这两者对于避免内存泄漏和其他潜在问题至关重要。特别是在处理涉及动态内存分配的类时,合理地...

    构造函数与析构函数.docx

    由于第 1 页 共 21 页 银舟计算机协会技术部学习资料它并不需要完成什么功能,所以这一类的构造函数是不需要任何参数的,没有任何参数的构造函数我们就称之为无参数的构造函数。那么有无参构造函数自然就会有“有参...

    C++中的构造函数、析构函数剖析

    如果没有定义任何构造函数,编译器会自动提供一个默认构造函数,该构造函数没有任何参数。 **注意:** - 如果类中至少定义了一个构造函数,则编译器不会自动提供默认构造函数。 - 构造函数可以接受任意数量的参数,...

    2.4+拷贝构造函数1

    需要注意的是,如果程序员没有自定义拷贝构造函数,C++编译器会提供一个默认的拷贝构造函数,它执行逐个成员的按位复制,适用于基本类型和不可变类型。但对于包含动态分配资源的类,这种默认行为可能不适用,可能...

    C++构造函数与析构函数

    构造函数可以有参数,也可以没有参数;它可以被重载,但不能被继承。 **示例代码解析:** ```cpp class Stock { public: // 构造函数定义 Stock(); // 其他成员函数... private: // 成员变量声明 int ...

    2.2拷贝构造函数(copyconstuctor)共2页

    为了提高性能,可以考虑使用编译器提供的“编译器合成的默认拷贝构造函数”,如果类的成员变量没有特殊要求(如动态内存分配的成员),编译器生成的拷贝构造函数通常已经足够。 此外,需要注意的是,如果类中有动态...

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

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

    有关c ++的题目,关于构造函数和拷贝构造函数的知识点

    在这个类中,没有明确地定义构造函数或拷贝构造函数。因此,在创建`guyuan`类的对象时,编译器会自动生成一个默认的构造函数,该构造函数将所有成员变量初始化为它们类型的默认值。同时,编译器还会提供一个默认的...

    拷贝构造函数和赋值运算符的区别.pdf

    总结起来,拷贝构造函数和赋值运算符的主要区别在于: 1. 调用时机:拷贝构造函数在创建新对象时调用,赋值运算符在已有对象之间进行赋值操作时调用。 2. 参数类型:拷贝构造函数的参数是常量引用,赋值运算符通常...

    C 程序设计课件:3 构造函数、析构函数.ppt

    2. **无返回值**:构造函数没有返回类型,即使是void也不行。 3. **自动调用**:当创建类的新对象时,构造函数会被自动调用。 4. **可重载**:可以为同一个类定义多个构造函数,只要它们的参数列表不同即可。 构造...

    define方法和构造函数return对象学习

    通常情况下,使用`new`关键字创建的实例会自动成为构造函数的返回值,但如果构造函数显式地返回了一个对象,则该对象将作为构造函数的返回值。例如: ```javascript function Person(name) { this.name = name; ...

    关于复制构造函数的使用(C++)

    总结来说,构造函数是 C++ 编程语言中极其重要的组成部分,它们不仅帮助我们正确地初始化对象,还提供了灵活性来满足不同的编程需求。复制构造函数、直接初始化、复制初始化以及赋值和临时对象的概念对于理解和有效...

    Java语言基础入门教程 Java实训教程 4.类构造函数-this-静态属性方法-instanceof运算符共55页.pptx

    构造函数的名称必须与类名完全一致,并且没有返回值。 - **构造函数特点**: - 函数名称必须与类名相同。 - 不允许有返回值。 - 可以添加的修饰符有限:无修饰符、`public`、`protected`或`private`。 - 构造...

    JavaScript构造函数详解

    如果构造函数没有显式返回一个值,那么它会自动返回它创建的新对象。如果构造函数显式返回一个对象,那么这个对象将会代替新创建的对象被返回;如果构造函数返回一个原始值(比如数字、字符串),那么这个原始值会被...

    C++中拷贝构造函数的总结详解

    如果程序员没有显式定义拷贝构造函数,C++编译器会自动生成一个默认的拷贝构造函数,执行的是浅拷贝,也就是逐个复制对象的成员变量。如果类中包含动态分配的资源(如指针成员),浅拷贝可能会导致问题,因为它只是...

    基于JavaScript自定义构造函数的详解说明

    - 如果构造函数有返回值且不是对象,忽略返回值;如果有对象返回,则返回该对象,否则返回新创建的对象。 2. **自定义构造函数** 自定义构造函数是用户定义的用于创建特定类型对象的函数。以下是一个简单的构造...

Global site tag (gtag.js) - Google Analytics