Java 提供了 System
类和 Runtime
类来与程序的运行平台进行交互。
System
类
代表当前 Java 程序的运行平台,程序不能创建 System 类的对象,可以直接通过 System
类来调用这些类变量和类方法。提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法。
|
|
注意
TODO: Finish the dll compilation.
加载文件和动态链接库主要对 native
方法有用,对于一些特殊的功能(如访问操作系统底层硬件设备等)Java 程序无法实现,必须借助 C 语言来完成,此时需要使用 C 语言为 Java 方法提供实现。其实现步骤如下:
- Java 程序中声明
native
修饰符的方法,类似于abstract
方法,只有方法签名,没有实现。编译该 Java 程序,生成一个 class 文件。 - 用 javah 编译第 1 步生成的 class 文件,将产生一个 .h 文件。
- 写一个 .cpp 文件实现 native 方法,这一步需要包含第 2 步产生的 .h 文件(这个 .h 文件中又包含了 JDK 带的 jni.h 文件)。
- 将第 3 步的 .cpp 文件编译成动态链接库文件。
- 在 Java 中用 System 类的 loadLibrary..() 方法或 Runtime 类的 loadLibrary() 方法加载第 4 步产生的动态链接库文件,Java 程序中就可以调用这个 native 方法。
Syetem 类提供了一个 identityHashCode(Object x)
方法,该方法返回指定对象的精确 hashCode
值,也就是根据该对象的地址计算得到的 hashCode
值。当某个类的 hashCode()
方法被重写后,该类实例的 hashCode()
方法就不能惟一地标识该对象;但通过 identityHashCode()
方法返回的 hashCode
值,依然式根据该对象的地址计算得到的 hashCode
值。所以,如果两个对象的 indentityHashCode
值相同,则两个对象一定是同一个对象。这个值可以唯一地标识一个对象。
|
|
Runtime
类
Rumtime 类代表 Java 程序的运行时环境,每个 Java 程序都有一个与之对应的 Runtime 实例,可以访问 JVM 的相关信息,如处理器数量、内存信息等。应用程序不能创建自己的 Runtime
实例,但可以通过 getRuntime()
方法获取与之关联的 Runtime
对象。
|
|
除此之外,Runtime
类还有一个功能——它可以直接单独启动一个进程来运行操作系统的命令。