A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class  Person
  2. {
  3.         Person(){}//自定义的空参数构造函数
  4.         
  5.         /*
  6.         如果我不自定义构造函数,编译器就会自动为这个类型生成默认构造函数
  7.         目前我知道:默认构造函数的权限和类的权限相同。
  8.         问题:除了这一点外,默认构造函数和我上边自定义的空参数构造函数有什么区别吗?
  9.         有什么要注意的地方吗?
  10.         */
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

9 个回复

倒序浏览
没有区别,自定义的空构造函数和默认的构造函数完全一样,默认的写法和自定义的空构造函数是一模一样的,一般没必要写一个空构造函数,自定义的非空构造函数就不一样了,非空它可以在初始化时就对成员进行赋值等,好比说人一出生就会哭,哭这个动作就是自定义的非空构造函数

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
如果说同样是空的构造函数,可以加私有应用于单例模式(加了私有以后也还算是内容为空的构造函数),你上面那段代码那样的。。我也不知道跟系统默认的有什么区别了。。
回复 使用道具 举报
要说默认构造函数和自定义空的构造函数的区别也就是访问权限问题了,自定义空的构造函数可以自定义其访问权限。构造函数一般情况下用于完成一些初始化的工作,一般情况下不需要自定义空的构造函数;
如果为了防止在外部通过new的方式创建该类的对象,可以为该类自定义一个私有的空构造函数,防止默认构造函数的产生,例如单例模式

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
其实两者是完全一样的,当你写了一个非空构造函数时就会吧java中的默认构造函数给覆盖掉不可以在使用了
回复 使用道具 举报
我想告诉楼主的是,默认的构造函数和自己定义的构造函数从语法来讲是没有什么区别的,但是从用法来讲是有区别的,默认的构造函数是在你没有定义非空构造函数的情况下生效的,一旦定义了非空构造函数来初始化对象,而子类的对象在初始化时又需要调用父类的无参构造函数,那么你必须定义一个无参构造函数,这个时候自己定义的无参构造函数充当了默认的构造函数的功能。所以你是否需要自己定义无参构造函数,一般情况下,如果自己定义了带参的构造函数时,最好是定义一个无参构造函数,以免后续报错!

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
刘望望 发表于 2014-3-10 13:07
要说默认构造函数和自定义空的构造函数的区别也就是访问权限问题了,自定义空的构造函数可以自定义其访问权 ...

回答太给力了
回复 使用道具 举报
刘凯旋 发表于 2014-3-10 11:48
没有区别,自定义的空构造函数和默认的构造函数完全一样,默认的写法和自定义的空构造函数是一模一样的,一 ...

肯定不是完全一样啦
回复 使用道具 举报
自定义的构造函数与空构造函数一般是没有区别的,但是如果为了防止在外部通过new的方式创建该类的对象,可以为该类自定义一个私有的空构造函数,防止默认构造函数的产生,例如单例模式!

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
默认构造函数是在这个类没有定义其它带参构造函数的情况下系统自动生成的。
如果不需要对对象中的属性或者其它相关状态进行初始化,自定义空参数构造函数与默认构造函数的空能完全相同。

但有两点必须注意:
1、如楼上所说,默认构造函数的默认访问权限是非私有的。所以在处理单例模式的时候,需要用私有的自定义空参数构造函数,来代替默认构造函数。
2、当某个类存在多个构造函数时,系统不会再生成默认构造函数。比如,对JavaBean的定义。只要求该类有空参构造函数。当存在其它带参构造函数时,必须显式定义空参数构造函数。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马