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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘沛霞 于 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();
}
}
为什么会报错啊!!??

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

12 个回复

倒序浏览
构造函数是用于初始化对象用的,你将构造函数私有化了之后,new对象时,对象不能访问构造函数,导致对象初始化失败,所以报错。

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
嘻嘻!因为你创建对象的时候就会调用相应的构造函数啊!
当你不写构造函数的时候,系统会默认给你调一个无参的构造函数,所以可以 创建成功!
当你自己写了构造函数的时候,系统就不会给你分配默认构造函数了!
你这里定义的是一个private的构造函数,其它类是不能够访问的,所以才会报错!
你改一下权限就可以了!
私有构造函数,一般在单例设计模式中才会用到,就是说不希望其他类创建本类的对象时,才会用到!

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
private 只能在类的内部使用,不能再其他类中调用
回复 使用道具 举报
额....你都把构造函数私有了啦,私有之后就只对本类有效,
其实我是这样理解的,建立对象其实就是等于在调用构造函数
你把构造函数私有化就不能建立了
,你看到那个单例设计模式就会知道了
回复 使用道具 举报
private --> 私有权限修饰符,用于修饰类中的成员变量、成员函数,私有只在本类中有效。

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

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

其实有个东西是单例模式....
里面的构造函数就是被private修饰的...
不是不能不创建
只是不能用new 关键字创建
回复 使用道具 举报
哦 这段信息是说Person()构造方法时私有的 不可以被外部调用 可见构造方法一般都是public的因为它们在对象产生时 会被系统自动调用  今天才弄懂的 谢谢各位的支持
回复 使用道具 举报
无参构造函数person()被你用“private"修饰了,外界也就不能通过new 创建无参person()类的对象了 。  
我才刚起步,第4天,加油!
回复 使用道具 举报
chouwayメ 发表于 2013-5-1 19:40
无参构造函数person()被你用“private"修饰了,外界也就不能通过new 创建无参person()类的对象了 。  
我 ...

无畏!加油
回复 使用道具 举报
如果问题解决,请点编辑,改为已解决,没有请继续追问
回复 使用道具 举报
构造函数被私有化,函数对象将不能被访问,new也就没有意义了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马