黑马程序员技术交流社区

标题: 声明构造函数方法时 可以用private访问修饰符么? [打印本页]

作者: 刘沛霞    时间: 2013-4-30 12:03
标题: 声明构造函数方法时 可以用private访问修饰符么?
本帖最后由 刘沛霞 于 2013-4-30 21:18 编辑

class Person
{
private Person()
   {
   System.out.println("the sun ");
   }
}
class TestPerson
{
public static void main (Staring [] args)
{
Person p1 = new Person();
}
}
为什么会报错啊!!??

作者: bianbian18    时间: 2013-4-30 12:14
构造函数是用于初始化对象用的,你将构造函数私有化了之后,new对象时,对象不能访问构造函数,导致对象初始化失败,所以报错。
作者: $love    时间: 2013-4-30 12:17
嘻嘻!因为你创建对象的时候就会调用相应的构造函数啊!
当你不写构造函数的时候,系统会默认给你调一个无参的构造函数,所以可以 创建成功!
当你自己写了构造函数的时候,系统就不会给你分配默认构造函数了!
你这里定义的是一个private的构造函数,其它类是不能够访问的,所以才会报错!
你改一下权限就可以了!
私有构造函数,一般在单例设计模式中才会用到,就是说不希望其他类创建本类的对象时,才会用到!
作者: 严露华    时间: 2013-4-30 12:30
private 只能在类的内部使用,不能再其他类中调用
作者: 江大海    时间: 2013-4-30 12:35
额....你都把构造函数私有了啦,私有之后就只对本类有效,
其实我是这样理解的,建立对象其实就是等于在调用构造函数
你把构造函数私有化就不能建立了
,你看到那个单例设计模式就会知道了
作者: 梁海君    时间: 2013-4-30 13:03
private --> 私有权限修饰符,用于修饰类中的成员变量、成员函数,私有只在本类中有效。

我们来看下报错提示:change visibility of 'Person()' to 'default';default翻译过来就是缺省、欠缺的意思
你在main函数将其调用,是访问不了的,因为已经出了它的范围

还有就是LZ的String写错了哦~
作者: liuelxiwd    时间: 2013-4-30 13:11
2楼正解,好多老师依据某本教材上说构造函数必须为public的,显而易见是错的,希望不要有人受误导。
作者: 刘胜寒    时间: 2013-4-30 13:55
bianbian18 发表于 2013-4-30 12:14
构造函数是用于初始化对象用的,你将构造函数私有化了之后,new对象时,对象不能访问构造函数,导致对象初 ...

其实有个东西是单例模式....
里面的构造函数就是被private修饰的...
不是不能不创建
只是不能用new 关键字创建

作者: 刘沛霞    时间: 2013-4-30 21:17
哦 这段信息是说Person()构造方法时私有的 不可以被外部调用 可见构造方法一般都是public的因为它们在对象产生时 会被系统自动调用  今天才弄懂的 谢谢各位的支持
作者: chouwayメ    时间: 2013-5-1 19:40
无参构造函数person()被你用“private"修饰了,外界也就不能通过new 创建无参person()类的对象了 。  
我才刚起步,第4天,加油!
作者: 曹睿翔    时间: 2013-5-1 21:48
chouwayメ 发表于 2013-5-1 19:40
无参构造函数person()被你用“private"修饰了,外界也就不能通过new 创建无参person()类的对象了 。  
我 ...

无畏!加油
作者: 曹睿翔    时间: 2013-5-1 21:49
如果问题解决,请点编辑,改为已解决,没有请继续追问
作者: 逝者轨迹    时间: 2013-5-3 12:26
构造函数被私有化,函数对象将不能被访问,new也就没有意义了




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