黑马程序员技术交流社区

标题: JAVA中的构造方法可以定义为void吗? [打印本页]

作者: 樊其杰    时间: 2013-3-16 10:44
标题: JAVA中的构造方法可以定义为void吗?
构造函数是没有返回值,那用void可以吗?
作者: 边道坚    时间: 2013-3-16 10:55
构造函数作用是在类初始化的同时初始化一些变量或参数,不需要返回值;
而void指的是方法,当一个方法只是完成某种功能计算时并不需要返回值。

比如说
class A{

int a;
int b;
//构造函数
public A(int a,int b){
    this.a = a;
    this.b = b;
}
//void 方法,只是完成计算
void plus(){
    System.out.println(a+b);
}
}
作者: 袁术森    时间: 2013-3-16 10:56
构造函数有构造函数的格式,构造函数的目的就是在创建该类对象并进行初始化时用到,
这个问题就相当于在问构造函数可以像一个一般函数一样被其他函数调用么,因为被调用就需要声明返回值类型
这是我的理解 ,不知正确否


作者: 黑马-郑玉元    时间: 2013-3-16 11:01
我这里给你想想说下!让你多理解下!
1.构造方法的作用
                初始化对象
               
                类名 引用名=new 构造方法();

2.构造方法的格式

                1.构造方法的名字必须与类名相同。
                2.构造方法不能有修饰符(权限除外 public private )
                3.构造方法没有返回值类型 void也没有。
3.构造方法的注意事项
                1.如果一个类没构造方法,那么当它加载时, jvm会为其分配一个默认的空的无参构造方法
                  但是如果我们手动去创建了一个构造方法,那么默认的就不会在创建。

                2.构造方法是用来创建对象的,我们程序员不能手动调用构造方法。

                3.构造方法也可以重载。好处是可以通过多种途径去实例化类的对象。

               
        构造方法带参数的目的:是可以在创建对象的过程中就对对象的属性进行赋值操作。
        以后在开发中使用别人写的类时,就需要查看其提供什么样的构造方法,才能通过构造方法实例化对象去使用。
作者: 杨冉    时间: 2013-3-16 11:26
答案是不能,没有返回值和返回值为void是两种概念
《Thinking in java》这本书里头是这么解释的:
"The constructor is an unusual type of method because it has no return value. This is distinctly different from a void return value, in which the method returns nothing but you still have the option to make it return something else. Constructors return nothing and you don’t have an option (the new expression does return a reference to the newly created object, but the constructor itself has no return value). If there were a return value, and if you could select your own, the compiler would somehow need to know what to do with that return value."
总结下原因就是,构造函数是完全不能够返回值的,我们没有选择。而void是我们有选择的不返回一个值。只有这样区分了,虚拟机才知道哪个是构造函数。
我们可以写段代码来看返回类型为void时是否能作为构造函数被调用:
  1. public class ConstructorTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Test test = new Test();
  6.                 System.out.println("x="+test.x);
  7.         }

  8. }

  9. class Test
  10. {
  11.         void Test()
  12.         {
  13.                 x=10;
  14.         }
  15.        
  16.         int x;
  17. }
复制代码
输出结果为:x=0
由此我们看来,实例化Test时并没有调用void Test()这个方法使x被赋值为10。也就是说,加了void就不是构造函数了。
作者: 刘琦    时间: 2013-3-16 12:41
构造方法必须和类相同的名,虽然不会又返回值,也不能在里面加入return返回,因为方法名和类名相同,可以自动调用这个构造方法,如果加入void就变成普通的方法了,不再是构造方法了

作者: 疯狂程序    时间: 2013-3-16 12:57
构造函数与其他函数的区别你要理解,最大的区别是
1.构造函数没有返回值,并且构造函数是new新对象时候就自动运行
2.他和类必须相同的名

如果你加入void或是其他的返回值,那你定义的不是构造函数,而是其他的函数(方法),new新对象的时候不会自动的运行
作者: 陈丽莉    时间: 2013-3-16 14:25
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2