社区
Java SE
帖子详情
请教这种写法的用意
icedsb
2007-09-07 09:40:45
class A
{
A getA()
{
return new A();
}
}
...全文
784
47
打赏
收藏
请教这种写法的用意
class A { A getA() { return new A(); } }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
47 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jaymrcool
2007-09-12
打赏
举报
回复
dd
amazeur
2007-09-12
打赏
举报
回复
up
marf_cn
2007-09-12
打赏
举报
回复
...
在这个类以外声明A时。使用A a = new A()是非法的。
----------------------------------------------
我试了一下,调用完全合法
----------------------------------------------
。。。private了。怎么调。。。
后面在说点什么是看不懂了,拜拜各位大虾。。。
----------------------------------------------
lz的代码中那有private?在ide里编译一下就知道了
火龙果被占用了
2007-09-12
打赏
举报
回复
class A
{
private A(){}// 将构造器变为私有。
A getA()
{
return new A();
}
}
那么想要声明一个A就只能调用getA().
____________________________________
不好意思,我想问一下,照这样写 getA() 这个方法在外部怎样才能调用呢?
flyforlove
2007-09-12
打赏
举报
回复
回复人:zjf405(On№The①Road) ( 五级(中级)) 信誉:100 2007-09-12 13:02:52 得分:0
?
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
以上是NAS公司采用的单态模式(NEC下属公司)
-------------
这种写法的缺点上面已经说了,当然不管什么代码都有其应用场合。
有缺陷就是有缺陷,就算是sun公司在用,它还是有缺陷。
zjf405
2007-09-12
打赏
举报
回复
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
以上是NAS公司采用的单态模式(NEC下属公司)
zjf405
2007-09-11
打赏
举报
回复
mark
火龙果被占用了
2007-09-07
打赏
举报
回复
多线程情况下,乖乖的这样用吧。
public A {
private A() {}
private static A a = new A();
public static getInstance() {
return a;
}
}
=======================================
我不认为这样比较好,因为总有办法让 a 为 null 的。只要 a 为 null,那整个就没办法用了。
hzalan
2007-09-07
打赏
举报
回复
...
在这个类以外声明A时。使用A a = new A()是非法的。
----------------------------------------------
我试了一下,调用完全合法
----------------------------------------------
。。。private了。怎么调。。。
后面在说点什么是看不懂了,拜拜各位大虾。。。
左大神在这
2007-09-07
打赏
举报
回复
如果仅仅是这样子的话,意义不大,或者说基本没有什么意义。
顺便说下singleton模式的基本条件:
1.构造函数是私有的,意味着外界不能直接通过new的方式来创建该类的实例。
2.该类必须自己创建自身的唯一实例。
3.该类必须向外界提供访问唯一实例的接口。
flyforlove
2007-09-07
打赏
举报
回复
回复人:nihao955() ( 一级(初级)) 信誉:100 2007-09-07 11:47:22 得分:0
?
public A {
private A() {}
private static A a;
public static getInstance() {
if(a == null) {
a = new A(); //当多个线程同时到达这个地方的时候。
}
return a;
}
}
能不能将 getInstance() 方法修改成 synchronized 的??
----------------------------
可以,不过在多线程情况下效率比较差。
回复人:bit1010(有色心没色胆,给我一瓶二锅头!) ( 二级(初级)) 信誉:100 2007-09-07 11:48:49 得分:0
?
flyforlove(吾将远去) 的做法难道没有问题?
多线程情况下,乖乖的这样用吧。
public A {
private A() {}
private static A a = new A();
public static getInstance() {
return a;
}
}
这个在多class loader的情况下,还是会有问题,
可以使用double-checking
------------------
那你能不能告诉我,在多class loader的情况下,还要使用singleton??
我上面说了,由于java的内存空间分配和C#不同,所以即使用dcl,也不安全。
marf_cn
2007-09-07
打赏
举报
回复
在这个类以外声明A时。使用A a = new A()是非法的。
----------------------------------------------
我试了一下,调用完全合法
bit1010
2007-09-07
打赏
举报
回复
flyforlove(吾将远去) 的做法难道没有问题?
多线程情况下,乖乖的这样用吧。
public A {
private A() {}
private static A a = new A();
public static getInstance() {
return a;
}
}
这个在多class loader的情况下,还是会有问题,
可以使用double-checking
nihao955
2007-09-07
打赏
举报
回复
public A {
private A() {}
private static A a;
public static getInstance() {
if(a == null) {
a = new A(); //当多个线程同时到达这个地方的时候。
}
return a;
}
}
能不能将 getInstance() 方法修改成 synchronized 的??
wuhaozhiyuan
2007-09-07
打赏
举报
回复
知道了多谢 flyforlove(吾将远去)
flyforlove
2007-09-07
打赏
举报
回复
回复人:wuhaozhiyuan(飘) ( 二级(初级)) 信誉:100 2007-09-07 11:22:14 得分:0
?
回复人:flyforlove(吾将远去) ( 一星(中级))
麻烦给讲解一下为什么是陷阱,
这样写有什么不妥吗?
------------------
public A {
private A() {}
private static A a;
public static getInstance() {
if(a == null) {
a = new A(); //当多个线程同时到达这个地方的时候。
}
return a;
}
}
出现上述情况,会创建多个不同实例,这种lazy模式在c#里可以使用double-check,但是在java里不适用。
多线程情况下,乖乖的这样用吧。
public A {
private A() {}
private static A a = new A();
public static getInstance() {
return a;
}
}
wuhaozhiyuan
2007-09-07
打赏
举报
回复
回复人:flyforlove(吾将远去) ( 一星(中级))
麻烦给讲解一下为什么是陷阱,
这样写有什么不妥吗?
malligator
2007-09-07
打赏
举报
回复
单例模式的要static,否则,用实例返回实例? 改个名字写个clone方法吧
flyforlove
2007-09-07
打赏
举报
回复
回复人:bao110908(火龙果) ( 五级(中级)) 信誉:100 2007-09-07 11:14:30 得分:0
?
如果使用的是 Singleton 的话,好像还少了点什么东西
public A {
private A() {}
private static A a;
public static getInstance() {
if(a == null) {
a = new A();
}
return a;
}
}
-------------
千万别这样用,这是个陷阱。
火龙果被占用了
2007-09-07
打赏
举报
回复
如果使用的是 Singleton 的话,好像还少了点什么东西
public A {
private A() {}
private static A a;
public static getInstance() {
if(a == null) {
a = new A();
}
return a;
}
}
加载更多回复(27)
蔡义江《红楼梦诗词曲赋评注》下
第五十三回 宁国府除夕祭宗祠 荣国府元宵开夜宴贾祠联额三副 贾氏宗祠 (匾额) 肝脑涂地,兆姓赖保育之恩;功名贯天,百代仰蒸赏之盛。星辉辅弼 (匾额) 勋业有光昭日月,功名无间及儿孙。慎终追远 (匾额) 已后儿孙承福德,至今黎庶念宁荣。名家点评:三副联额在贾府表面的盛况开始被明显的衰象所代替的转折时刻介绍,使联额内容与现实情况之间的矛盾引人注目;作为此后贾府失宠于朝廷、积恶于庶黎,终至抄没败
古代汉语(王力版)笔记 通论6-7
通论(六)——古今字,异体字,繁简字本节是讲古书中的用字情况。汉语的用字情况比较复杂,尽管古汉语基本上一个字代表一个词,但是字与词之间在很多情况下是不一致的。从现在的角度看古代书面语,既有几个字共表一词的情况,也有一个字表数词的情况。几个字共表一词的主要有:①通假字(本有其字的假借);②古今字;③异体字;④繁简字。一个字表数词的主要有:①假借字(本无其字的假借);②同形字。关于假借字,我们在讲“六书”时已过,这里再举几个例子,如“之”既可表动词“往”(本义),义可表虚词(假借义),“夫”既可表名词男子(本义
记java应用linux服务单个CPU使用率100%分析
之前在做项目的过程中,项目完成后在linux服务器上做性能测试,当服务跑起来的时候发现cpu使用率很奇怪,java应用把单个cpu跑满了,其他cpu利用率0%。 刚开始遇到这问题的时候我第一时间反应使用java 自带的jconsole工具去分析,具体远程jconsole工具使用参考我另外一篇博客,分析结果后只发现创建了很多的es client对象,其他完全看不出任何异常。 我就把...
如何阅读他人的项目源代码程序
相信很多人和我一样,面对着别人密密麻麻的代码,宁愿自己从零开始编写自己的代码,也不愿在别人代码的基础上修改: 阅读别人的代码太痛苦了! 在注释不明确、技术文档缺失,这一行行的代码犹如阅读天书一般,痛苦、煎熬,迷茫。因此,对于阅读别人的代码,我从内心有一种强烈的抵制情绪,甚至有些恐惧。 然而,阅读他人的项目源码是每一个写程序的人(我只是个在项目需要的时候偶尔写程序的,不敢自称程序员)必须经历的事情。...
如何阅读项目源码程序
原文:https://blog.csdn.net/Vince_ZHU/article/details/82903834 1.备份并编译运行代码 拿到项目源代码后,首先应该对代码进行备份,因为很可能我们在哪儿就不小心改动了代码,养成备份的好习惯是很重要的。然后我们可以在IDE中编译运行,虽然看不到项目的细节,但是通过运行程序,我们会对程序的功能和运行过程有更加直观的认识。同时,编译运行的过程会让...
Java SE
62,623
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章