14.14 ThreadLocal和InheritableThreadLocal
在Java 2的java.lang中增加了两个与线程有关的类:
· ThreadLocal 用于创建线程局部变量。每个线程都拥有自己局部变量的拷贝。
· InheritableThreadLocal 创建可以被继承的线程局部变量。
14.15 Package
在Java 2中增加了一个称为Package的类。这个类封装了与包有关的版本数据。包版本信息由于包的增值以及由于Java程序可能需要知道哪些包版本可以利用而变得更加重要。Package中定义的方法列在表14-18中。下面的程序通过显示程序当前已知的包而说明了Package。
表14-18 由Package 定义的方法
方法 描述
String getImplementationTitle( ) 返回调用包的标题
String getImplementationVendor( ) 返回调用包的实现程序的程序名
String getImplementationVersion( ) 返回调用包的版本号
String getName( ) 返回调用包的名字
Static Package getPackage(String pkgName) 返回一个由pkgName指定的Package对象
续表
方法 描述
Static Package[ ] getPackages( ) 返回调用程序当前已知的所有包
String getSpecificationTitle( ) 返回调用包的规格说明的标题
String getSpecificationVendor( ) 返回对调用包的规格说明的所有者的名字
String getSpecificationVersion( ) 返回调用包的规格说明的版本号
Int hashCode( ) 返回调用包的散列码
Boolean isCompatibleWith(String verNum)
throws NumberFormatException
如果verNum小于或等于调用包的版本号,则返回true
Boolean isSealed( ) 如果调用包被封,则返回true;否则返回false
Boolean isSealed(URL url) 如果调用包相对于url被封,则返回true;否则返回false。
String toString( ) 返回调用包的等价字符串形式
// Demonstrate Package
class PkgTest {
public static void main(String args[]) {
Package pkgs[];
pkgs = Package.getPackages();
for(int i=0; i < pkgs.length; i++)
System.out.println(
pkgs[i].getName() + " " +
pkgs[i].getImplementationTitle() + " " +
pkgs[i].getImplementationVendor() + " " +
pkgs[i].getImplementationVersion()
);
}
}
14.16 RuntimePermission
在Java 2的java.lang中也新增加了RuntimePermission。它与Java的安全机制有关,这里不做进一步的讨论。
14.17 Throwable
Throwable类支持Java的异常处理系统,它是派生所有异常类的类。在本书第10章已经讨论过它。
14.18 SecurityManager
SecurityManager是一个子类可以实现的抽象类,它用于创建一个安全管理程序。一般不需要实现自己的安全管理程序,如果非要这样做,需要查阅与你的Java开发系统一起得到的相关文档。
14.19 Comparable接口
Java 2在java.lang中新增加了一个接口:Comparable。实现Comparable的类的对象可以被排序。换句话说,实现Comparable的类包含了可以按某种有意义的方式进行比较的对象。Comparable接口说明了一个方法,该方法用于确定Java 2调用一个类的实例的自然顺序。该方法如下所示:
int compareTo(Object obj)
这个方法比较调用对象和obj。如果他们相等,就返回0。如果调用对象比obj小,则返回一个负值。否则返回一个正值。该接口由前面已经介绍的几种类实现。特别是Byte,Character,Double,Float,Long,Short,String以及Integer类定义了compareTo( )方法。另外,下一章将会介绍到,实现这个接口的对象可以被使用在不同的集合中。
14.20 java.lang.ref和java.lang.reflect包
在Java中定义了两个java.lang的子包:java.lang.ref和java.lang.reflect。下面分别予以简单介绍。
14.20.1 java.lang.ref
在前面学到过,在Java中,垃圾回收工具自动确定何时对一个对象,没有引用存在。然后这个对象就被认为是不再需要的,同时它所占的内存也被释放。在Java 2中新增加的java.lang.ref包中的类对垃圾回收处理提供更加灵活的控制。例如,假设你的程序创建了大量的在后面某个时间又想重新使用的对象,可以持续保持对这些对象的引用,但是这可能需要更多的内存开销。作为替代,可以对这些对象定义“软”引用。如果可以利用的内存接近用完的话,一个可以“软实现”的对象可以从垃圾回收工具中释放。在那种情况下,垃圾回收工具将这个对象的“软”引用设为空(null)。否则,垃圾回收工具保存对象以便以后使用。程序设计人员具有确定是否一个“软实现”的对象被释放的能力。如果它被释放了,可以重新创建它。如果没有释放,该对象对于后面的应用将一直是可以利用的。也可以为对象创建“弱”(weak)和“假想”(phantom)引用,不过关于这些以及java.lang.ref包中其他特性的讨论已经超过了本书的范围。
14.20.2 java.lang.reflect
Reflection是一个程序分析自己的能力。包java.lang.reflect提供了获得关于一个类的域、构造函数、方法和修改符的能力。需要这些信息去创建可以使你利用Java Beans组件的软件工具。这个工具使用映射动态地确定组件的特征。这个主题将在第25章中讨论。另外,包java.lang.reflect包括了一个可以动态创建和访问数组的类。
<<上一页
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18