黑马程序员技术交流社区

标题: 关于构造函数能否被void修饰的疑问 [打印本页]

作者: 郑冬    时间: 2012-6-12 13:44
标题: 关于构造函数能否被void修饰的疑问
本帖最后由 郑冬 于 2012-6-19 13:12 编辑

看到了一个关于构造函数和一般函数区别的总结的帖子,里边提到“构造函数不用定义返回值类型(注:void也是返回值类型)”,张孝祥老师的基础课里讲的是“构造方法不含返回值(在构造方法里不含返回值的概念是不同于“void”的,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了)
现在有几个疑问:是不是构造方法可以用void修饰?如果能,用void修饰了之后的构造方法仍然是构造方法还是变成了普通方法?


U~[2CC15NM)Q7WZO8Y2F6)9.jpg (20.09 KB, 下载次数: 64)

构造函数

构造函数

作者: 杨天皓    时间: 2012-6-12 13:51
你加上void
不就成了public void 类名(){}

此时就相当与你重新定义了一个函数 不能起到构造函数的作用,它是一个普通的函数了。
作者: 邓杰    时间: 2012-6-12 14:27
JVM在运行程序时,对是否有明确构造函数的的判断依据就是是否有和类名相同并且没有返回值的函数;
你在构造前加了void,就说明没有就是变成了一个普通函数。举例吧JVM在运行程序时,对是否有明确构造函数的的判断依据就是是否有和类名相同并且没有返回值的函数;
你在构造前加了void,就说明没有就是变成了一个普通函数。举例吧

class B
{
B()//3 构造函数必须是没有返回值而且和类名相同的,
  //构造函数还有一个可以特点,如果没有自定义构造函数JVM将自己动加上一个
  //空参的构造函数:B(){};构造函数可以被public private等权限修饰符修饰;
  
{
  System.out.println("hehe");//
  
}
B(String s)//同时也具备普通函数重载特点;
{
  System.out.println(s);
}
void B()//1 因为前面加了void 虽然他和类名相同,Jvm却没有调用他。说明它就
   //就是一个普通函数,
{
  System.out.println("haha");
}
}
class  A
{
public static void main(String[] args)
{
  //new B();
  new B("heihei");
  //new B().B();//2 需要用普通函数的调用方法,该方法才会执行;
}
}
作者: 郑传庆    时间: 2012-6-12 14:30
构造方法的定义:必须跟类名相同,而且没有返回值类型,也不能定义为void,也就是不能在方法名前面声明方法的类型。构造函数是用来对对象初始化的,由系统调用。在类里面系统都会默认一个不带参数的构造方法,但是如果类里面有带参数的构造方法,系统就调用参数的方法而不再掉用没参数的方法,除非程序员在定义个一个不带参数的方法。
如果构造方法用void修饰,就不在属于构造方法,虽然还是跟类名相同,但它是属于一个普通的方法




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