随笔 - 11  文章 - 33  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

搜索

  •  

最新随笔

最新评论

阅读排行榜

评论排行榜

我的评论

@asdf
独占锁既可以是悲观的也可以是乐观的呀,用CAS实现的独占锁不就是乐观的?
synchronized使用的内置锁和ReentrantLock这种显式锁在java6以后性能没多大差异,在更新的版本中内置锁只会比显式锁性能更好。这两种锁都是独占锁,java5以前内置锁性能低的原因是它没做任何优化,直接使用系统的互斥体来获取锁。显式锁除了CAS的时候利用的是本地代码以外,其它的部分都是Java代码实现的,在后续版本的Java中,显式锁不太可能会比内置锁好,只会更差。使用显式锁的唯一理由是要利用它更多的功能。
“独占锁是一种悲观锁”,这是错误的说法。
博主关于hanppens-before规则的第5条有错误。
楼主,你好。我自己在linux下试验的时候发现用%JAVA_HOME%不行,必须改成java home的绝对路径才行,不知道是什么原因。
这个Axman过于自大了。子类的对象为什么就不能和父类的对象equals?lsp原则忘记了吗?
teasp@163.com
谢谢楼主
楼上说得很有道理,最关键的问题是我们不知道哪些特性才是一个类的标志。因为现实世界太复杂了,简直不可模仿
没看过相关讨论的可以看看这个先:

长方形有二个属性长和宽。并有一个设置长的方法和设置宽的方法,还有一个求面积的方法.
像下面
private int length;
private int width;
public void setLength(int lenght) {
this.length = lenght;
}
public void setWidth(int width) {
this.width= width;
}
public int getArea() {
return this.length * this.width;
}
如果说正方形是长方形的子类。为了保证正方形长和宽相等,那对应于正方形的二设置长宽的个方法就得改成
public void setLength(int lenght) {
this.length = lenght;
this.width= lenght;
}
public void setWidth(int width) {
this.length = width;
this.width= width;
}
那我们想想用户使用时候的情景。 我们都知道长方形的面积等于长与宽的积。那当我们用长方形的时候我们会这样用
Rectangle rectangle = new Rectangle();
rectangle.setLength(5);
rectangle.setWidth(4);
我们想知道面积是多少我们就可以
rectangle.getArea();
得到的是20,当然结果是非常正确的。
但想想如果我们把一个正方形的实例给用户用的时候会怎么样
Rectangle rectangle = new Square(); //注意,这里体显代换原则。用户根本不知道真正的实例是正方形,用户只知道长方形的事情。
rectangle.setLength(5);
rectangle.setWidth(4);
我们想知道面积是多少我们就可以
rectangle.getArea();
得到的结果却是 16 ,这违背了长方形的面积是长与宽之积的原则。用户就不会明白为什么我设置了长是5宽是4得到的答案却是16 ?? 与前提不符
所以正方形不能代替长方形出现在这个地方。
也就是说正方形不应当看作是长方形的子类。
re: Java中的++操作 teasp 2007-09-20 21:40  
@Jack L

是的。我猜错了,呵呵
re: JAVA操作windows注册表 teasp 2007-09-20 21:39  
good.
@黑蝙蝠

呵呵,我不知道你有没有看过关于正方形不是长方形的讨论,网上有的,另外《Java与模式》里面第79页左右就是讲这个问题的。如果你看过相关的内容,应该能明白我要表达的意思了。
@GandofYan
兄弟啊,Square只有一个构造方法,你说的这句有语法错误哦。
quite make sense
re: Java中的++操作 teasp 2007-09-20 18:03  
晕,没想到这么多人评论了。。。
re: Java中的++操作 teasp 2007-09-20 18:02  
二楼的实验也非常有意义。没想到c和java在这一点上还有区别,呵呵,学到了。不过有一点不太同意二楼说的,我觉得在c里面应该是 i=i++;和i=(i++);的区别,前者不会加1,后者会,而java中这两者是一样的。我说的仅仅是猜测,并没有实验过,说错了见谅
re: 微软真恶心 teasp 2007-09-20 17:43  
呵呵,楼上误会了哦,这不是政治吧,我是觉得微软那么做不恰当啊
re: 查看手机对JAVA的支持信息 teasp 2007-09-20 16:56  
感觉你懂的好多啊,我现在还在入门中。。。
re: 男人25岁前的忠告 teasp 2007-09-20 13:14  
很好
re: 微软真恶心 teasp 2007-09-20 11:32  
china是有别的意思,可是russia没有别的意思啊
re: 软件开发#前途 teasp 2007-09-19 12:07  
有一点我的想法不一样,我觉得年纪越大积累的知识越多,学习能力会更强,有很多东西需要积累足够多的知识才行。
re: java里的clone teasp 2007-09-19 11:56  
非常感谢楼上的回复,虽然你说的我知道。应该是我没表述清楚,第一段里的“没法继承”应该是“没有继承”。我的意思是由于其他类都是继承Object,所以应该继承了Object的clone()方法,只是如果这个类没有实现cloneable的话,在调用clone()时会抛异常。而实际情况是,如果没有实现cloneable并重写clone()方法,压根就没clone()方法可以调用,这很奇怪。
re: java里的clone teasp 2007-09-18 12:07  
又看了一下,ArrayList是浅clone