第六章 复用类
虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意的对文件命名
除了内存以外,其他的垃圾回收(例如清楚显示器上已经创建的窗口),不要依赖垃圾回收器做任何事。如果需要进行清理,最好是编写你自己的清理方法,但不要依赖finalize()。
增量开发
继承技术的优点之一,就是它支持增量开放模式。你可以引入新代码而不会在现有代码中引发bug;事实上,这种模式可以将新的代码之中。
向上转型:有导出类转型成基类,在继承图上是向上移动的。
final数据
一个既是static又是final的字段只占据一段不能改变的存储空间。
对于基本类型,final使数值恒定不变;而用于对象引用,final使引用恒定不变。一旦引用初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象器自身却是可以被修改的,Java并为提供是任何对象恒定不变的途径(但可以自己编写类以使得对象恒定不变的效果)。这以限制同样适合数组,它也是对象。
不能因为V2是final的,就认为无法改变它的值。由于他是一个引用,final意味着无法将V2再次指向另一个新的对象。
1.空白的final
Java允许生成“空白final”,所谓空白final是指被声明为final但又未给定初值的字段。必须在字段的定义处或每个构造器中用表达式对final进行赋值,这正是final字段在使用前总是被初始化的原因所在。
2.final参数
参数指明为final。意味着你无法在方法中改变参数引用所指向的对象
3.final方法
使用final方法的原因又两个。第一:把方法锁定,以防任何继承类修改它的含义。第二:效率。
4.final与private关键字
类中所有的private方法都隐式的指定式final。由于无法取用private方法,所以无法覆盖它。可以对private方法添加final修饰词,但这并不能给该方法增加任何额外的意义。
如果某方法为private,它就不是基类的接口的一部分。它仅是隐藏于类中的程序代码,只不过是具有相同的名称而已。但如果在导出类以相同的名称生成一个public、protectd或宝访问权限方法的话,该方法就不会产生在基类中出现的“仅又相同名称”的情况。此时你并没有覆盖该方法,仅是生成一个新的方法。
5.final类
当将某个类的整体定义为final时(通过将关键字final置于它的定义前),就表明了你不打算继承该类,而且页不允许别人这样做。
继承与初始化
import com.bruceeckel.simpletest.*;
class Insect { static Test monitor = new Test(); int i = 9; int j; Insect() { prt("i = " + i + ", j = " + j); j = 39; } static int x1 = prt("static Insect.x1 initialized"); static int prt(String s) { System.out.println(s); return 47; } }
public class Beetle extends Insect { int k = prt("Beetle.k initialized"); Beetle() { prt("k = " + k); prt("j = " + j); } static int x2 = prt("static Beetle.x2 initialized"); public static void main(String[] args) { prt("Beetle constructor"); Beetle b = new Beetle(); monitor.expect(new String[] { "static Insect.x1 initialized", "static Beetle.x2 initialized", "Beetle constructor", "i = 9, j = 0", "Beetle.k initialized", "k = 47", "j = 39" }); } } ///:~
|
阅读(760) | 评论(0) | 转发(0) |