4.静态初始化器的一些重要注意事项
下面是在编码这些初始化器时,需要谨记的一些要点:
JVM将静态初始化器的大小限制为64KB。因此,不能在静态初始化器中放太多的代码。
不能从静态初始化器中抛出被检查的异常,异常将会在第8章“异常处理”中讨论。
不能在静态初始化器中使用this关键字,因为目前还没有创建实例。
不能在静态初始化器中显式地调用super。当类被加载时加载静态初始化器,只有当对象创建发生时才调用super。因此,super内建于非静态初始化器(构造函数)中。这就是为什么在静态初始化器中包含super会导致产生编译时错误。
静态初始化器没有返回类型。
测试静态初始化器中的代码通常成为开发者的噩梦。
警告
尽管会在第8章中对异常深入地进行讨论,但在这里还是简要地讨论一下如何在静态初始化器中处理异常。在我们之前的程序中,方法使用try-catch块捕获和处理异常。在静态初始化器中,不能使用try-catch块。因此,一种选择是记录异常,然后抛出Runtime Exception异常来终止当前线程;另一种选择是调用System.exit方法。然而,这在托管环境中(比如servlet中)是不可取的。这种选择通常用于Java应用程序,其中的静态初始化器执行一些关键操作,没有它们程序不可能运行成功——例如加载数据库驱动。第三种选择是设置标志来标识失败。然后,类的构造函数可以检查标志的状态,必要时抛出异常。最后,如果静态初始化器中的操作不是真正关键的,那么可以仅仅记录异常的入口并继续。
6.2接口
正如之前提到的,Java不支持多重继承——换句话说,类不可以有两个或多个父类。多重继承有自己的优点和缺点,Java通过接口实现了多重继承的一些好处。那么什么是接口呢?接口就是不相关的实体间用来互相交互的设备或系统等。当驾驶一辆汽车时,你是在同机器进行交互——两个完全不相关的实体。这两个实体间的交互通过定义良好的接口来转向、节流和制动。英语和法语可能被认为是两个人之间用来交流的接口——在这个例子中,两人是完全不相关的实体。远程控制是浏览者和电视设备之间的接口。在军队中,不同级别的人员之间的接口是强制执行的行为准则。Java接口类似于这样的协议,它们提供了不同类型或相同类型的对象之间一致同意的行为。
……
展开