Practical Java 读书笔记

看了三章的Pratical Java,复习一下…..

实践1:参数以by value方式传递而非by reference方式传递
如果你认为Java中的参数是以by reference方式传递的,那你就错了.参数都是以by value方式传递的.比如:我们新建一个类,类中有一个方法如下:
public static void modifyPoint(Point pt, int j ){} //当然里面会是修改该参数值的操作.后面有个main方法调用这个方法,实参分别为p 和 i.调用后会修改这两个参数的值吗?有一个会的.就是p.为什么?
因为当进行方法调用时,会将p 和i 值的副本传递给调用方法,当对p对象修改时,因为p是指向一个Point实例的引用,因而调用该方法,就会直接对Point对象属性进行修改.而i 值的副本修改后,和原先的i 是没有任何联系的.简而言之,Java 以by value方式传递了一个Object Reference

实践2: 对不变的data & object references 使用 final
看看这段代码:
class Circle {
private double rad;

public Circle( double r) {
rad = r;
}
public void setRadius(double r ) {
rad = r;
}
public double radius() {
return rad;
}
}

public class FinalTest {
private static final Circle wheel = new Circle( 5.0 );
public static void main( String args[] )
{
System.out.println(“Radius of wheel is ” +
wheel.radius() );
wheel.setRadius(7.4);
System.out.println(“Radius of wheel is now ” +
wheel.radius() );
}
}

是编译时候出错,还是会打印出: Radius of wheel is 5.0
Radius of wheel is now 7.4 ??
答案是第二个,为什么?我们已经将[b]final Circle wheel [/b]设置为final了啊?对,我们是设置了,但是我们这个操作并没有改变wheel的值啊,它依然是一个指向原先的对象,只是改变了wheel所指向对象的值罢了.当你要去改变一个定义为final的引用值时,编译器会报错的.比如你在main方法中加入一个wheel = new ClassName(); 编译器肯定报错,因为你试图更改一个final常量数据,使其指向另外的对象.

实践4: 在array & vectors 之间慎重选择

Vector的内部是array实现的.当新建一个vector,就会内建一个array.并以java.lang.object为其类别,用来管理将被存储于vector中的数据项.当vector增长时,其内部array就需要重新分配并进行拷贝.当有数据从vector移除,其底层array将被凑实.(compacted).如果未能适当运用vector,上述这些将会导致性能问题….
比较:
支持基本类别 支持对象 自动改变大小 速度快
array YES YES NO YES
vector NO YES YES NO

[align=right][size=1][color=#cccccc][Edit on 2004-4-29 23:43:32 By jfish][/color][/size][/align]

我的母校

在校友录上看到母校的照片,变化真大,我们一走人家成了省重点.没办法.
[img]uploadimg/200442912123690488.jpg[/img]
[img]uploadimg/20044291213143664.jpg[/img]
[img]uploadimg/200442912133377216.jpg[/img]
[img]uploadimg/200442912134443851.jpg[/img]

很高兴

下午分析了一下我的毕设,还不错,找到了自以为很有效的算法.而且不是很麻烦,这也与我先前的算法为后面铺平了路有关系.如果顺利,估计这两天好好做就可以完成一个最原始的英文识别软件了.真高兴.这个过程会很有趣,比如要识别一个A字母,那我判断的条件可能就是这个字母有个洞洞,而且两个边是渐宽的,下面还有个口,要识别H,那我会分析出,这个字符的左边和右边是基本平滑的,而且是上下开口的….总之就是根据字母的结构特征了,这样不会因为基于模板而产生的因为字体变化引起的匹配问题…..
写着个好像很枯燥哦,那写什么呢?Thinking……
[align=right][size=1][color=#cccccc][Edit on 2004-4-28 20:55:07 By jfish][/color][/size][/align]

弄坏了眼镜

今天打球弄坏了眼镜.不知道该怎么说那个家伙,有些人打球很一般,就是喜欢玩花样.我和他站那么近,他连看都不看往身后抛球,直接砸到我的右眼上.还好眼镜是树脂的,起到了缓冲的作用,右边的镜片被掰开了….那人和我一块去他宿舍取了钱,帮我配了新片子.还好他不是那种混人,那种人砸了你,还要和你理论说是你的错.我最烦这种事情了,要是遇到这种人,我宁可不要他赔,都不愿费这个功夫,真麻烦.

玩FIFA2004的截图

刚才进了一个漂亮的进球,电脑自动分析进球的配合. 齐达内在中路要球,德赛利看到两人上来放手将球传给维埃拉,齐达内在中路心领神会,向前直插,维埃拉斜传齐达内,后者一记外脚背抽射,皮球画出一条弧线,直飞网低,整个过程就在几秒种内完成,一气呵成,哈哈
[img]uploadimg/200442623404345643.jpg[/img][align=right][size=1][color=#cccccc][Edit on 2004-4-26 23:42:16 By jfish][/color][/size][/align]

毕设从4.5进入5.0

昨天忙了很久,终于把程序调试好.当我用鼠标一下一下的点击,右边的Canvas显示出正确的字符时,我太激动了.这就是我在一个多月前就像要实现的目标啊,终于实现了….为了这一天,我做了好多工作,在一堆的01数字里面分析出其中的规律,在乱七八糟的异常中,找到真正出错的地方…..虽然时间拖的久些,但我很满足了,能作出来.:d
这个是UI的截图
[img]uploadimg/20044262112798011.gif[/img][align=right][size=1][color=#cccccc][Edit on 2004-4-26 21:03:00 By jfish][/color][/size][/align]

Java经典网站收藏

1.http://www.matrix.org.cn/
不知道何时找到这个网站的,人气很旺.做的很细致.
2.http://www-900.ibm.com/developerWorks/cn
得了Jolt大奖,不能不收藏,Java的相关东西很多.当然它的英文站也是值得收藏的.
3.http://www.onjava.com
O’reilly的大名搞技术的都应该清楚才对,它的Java网站当然不可缺少了.
4.http://www.javalobby.org/
对这个不是很了解,不过也值得收藏.
5.http://java.sun.com
这个是绝对不可以缺少的.:D

总算有个结果

忙到现在,总算是有了结果.程序可以把第一行的字母完整的分割出来了(除了某些标点).这让我很欣慰,因为中午还在犹豫我究竟要不要改我的算法,是不是多个参考值结合起来进行分割.现在可以暂时缓缓了,等整个效果出来再说吧……现在感觉把毕设的这个软件完成算做10的话,现在差不多是4.5了.后面估计增长会快一些,所以我做出这个软件开始很有希望的…;):o睡觉去了,明天去找导师….