重温Thinking in Java(一)

来源:互联网 发布:淘宝店铺刷信用卡套现 编辑:程序博客网 时间:2024/05/17 02:14

抽空又把Thinking  in Java (3rd Edition)看了一下,看到第7章了,写写总结吧。

一切都是对象

在Java中,你只能做三件事,创建类,创建对象,向对象发送消息。通常是通过reference来操纵对象,这个reference就是电视机的遥控器。如果我们写if(reference1= =reference2), 这是判断两个对象是否是同一对象(即两个refernce指向同一对象),而不是判断这两个对象是否相等。这就好比C语言里的指针。Bruce Eckel大师说,一切都是对象。小生以为不尽然。比如class A{      int b;}那么这个b是对象吗?显然不是,b仅是基本类型。还有,如果要求一个数b的绝对值,是java.lang.Math.abs(b);如果一切都是对象的话,那么应该像ruby那样b.abs(), 呵呵

static

static是表示内容存储的位置固定,而不是内容的固定,内容的固定是由final来实现。一般来说,类中main方法必须是static,因为在编译java时,首先找到static方法(非静态方法和字段要等到生成了实例之后才会在存在).static独立于任何对象,也就是可以在不创建任何对象时调用static方法,调用方法如下 ClassName.staticMethond()

 生存域

就字段而言,它的生存域也叫作用域,C语言允许局部变量和全局变量重名,但java不能。就对象而言,生存域也叫生命周期,{       String s= new String("renzj");}//End  of scope大括号之外,s的作用域终止,但s仍然会占据内存,这要等待垃圾回收器来进行垃圾回收。因为对象"renzj"已经无法访问了,所以需要被回收内存。

关于垃圾回收

C++中的析构函数与Java中的finalize()是不同的,finalize()仅仅是标记一个对象需要被回收,只有等到垃圾回收器发现了这个已经标记了的对象,并且做出了回收动作,对象占有的内存才会被释放。但是,垃圾回收器什么时候运行,谁也不知道,连是否会运行都不知道,只有当内存快耗光时,垃圾回收器才会启动。所以我们不能依赖finalize() 来实现垃圾回收。Joshua Bloch曾经在Effective Java中写到,finalize()是完全多余的,你可以忘记它的在在。呵呵,够绝的吧:)

继承和接口

这个问题,争论已久。总之,尽量不要用继承,只有当需要向上转型时,才考虑继承,而且仅当在抽象类中进行继承。除此之外,用接口。过多地使用继承,是C++程序员的通病。在绝大多数情况下,我们需要的是抽象,而接口才会帮助我们抽象。

 public protected  default  privatepublic

 意为它能被任何一个类访问,protected意为它只能被同包内和子类访问,default意为它只以被同包内的类访问,private只能自己访问。通过这些标识符,可以实现类内成员的屏蔽和安全。

 final

final字段,意为它不能修改,要么在定义处初始化,要么在构造函数中初始化,初始化之后,便不能更改。final方法,是为了防止此方法被子类覆盖。子类中可以实现同名方法,不会报错,编译器会认为是一个新的方法。因为final不属于父类的接口,没法继承。final类,意为不能被继承。final类中的所有方法都是final,但字段不是这样的。如果一个方法是private,则它显然也是final的。但如果一个字段是private的,则不能说是final的,因为一个private字段可以被自己任意修改。慎用final,除非你百分之百保证这个方法不用被覆盖或这个类不用继承。

finally

常常与try{}搭配,意为不论发生什么情况,都必须执行finally()中的动作,经常用于关闭已打开的文件。

随笔于2006.3.24夜

原创粉丝点击