JAVA基础类库——System类和Runtime类

System类

System类代表当前Java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法。

System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载动态文件和动态链接库的方法。下面程序通过System类来访问操作的环境变量和系统属性。

注意:加载文件和动态链接库主要对native方法有用,对于一些特殊的功能(如访问操作系统底层硬件设备等)Java程序无法实现,必须借助C语言来完成,此时需要使用C语言为Java方法提供实现。其实现步骤如下:

  1. Java程序中声明native修饰的方法,类似于abstract方法,只有方法签名,没有实现。编译该Java程序,生成一个class文件。
  2. 用javah便宜第一步生成的class文件,将产生一个.h文件。
  3. 写一个.cpp文件实现native方法,这一步需要包含第2步产生的.h文件(这个.h文件中又包含了JDK带的jni.h文件)。
  4. 将第3步的.cpp文件编译成动态链接库文件。
  5. 在Java中用System类的loadLibrary..()方法或Runtime类的loadLibrary()方法加载第4步产生的动态链接库文件,Java程序中就可以调用这个native方法了。
public class SystemTest
{
  public static void main(String[]args)throws Exception
  {
    //获取系统所有的环境变量
    Map<String,String> env=System.getenv();
    for(String name:env.keySet())
    {
      System.out.println(name+"--->"+env.get(name));
    }
    //获取指定环境变量的值
    System.out.println(System.getenv("JAVA_HOME"));
    //获取所有的系统属性
    Properties props=System.getProperties();
    //将所有的系统属性保存到props.txt文件中
    props.store(new FileOutputStream("props.txt"),"System Properties");
    //输出特定的系统属性
    System.out.println(System.getProperty("os.name");
  }
}

上面程序通过调用System类的getenv()、getProperties()、getProperty()等方法来访问程序所在平台的环境变量和系统属性。该程序运行结束后还会在当前路径下生成一个props.xtxt文件,该文件中记录了当前平台的所有系统属性。

System类提供了通知系统进行垃圾回收的gc()方法,以及通知系统进行资源清理的runFinalization()方法。

System类还有两个获取系统当前时间的方法:currentTimeMillis()和nanoTime(),它们都返回一个long型整数。实际上它们都返回当前时间与UTC1970年1月1日午夜的时间差,前者以毫秒作为单位,后者以纳秒作为单位。必须指出的是:这两个方法返回的时间粒度取决于底层操作系统,可能所在的操作系统根本不支持毫秒、纳秒作为计时单位。

除此之外,System类的in、out和err分别代表系统的标准输入(通常是键盘)、标准输出(通常是显示器)和错误输出流,并提供了setIn()、setOut()和setErr()方法来改变系统的标准输入、标准输出和错误输出流。

System类还提供了一个identityHashCode(Object x)方法,该方法返回指定对象的精确hashcode值,也就是根据该对象的地址计算得到的hashcode值。当某个类的hashCode()方法被重写后,该类实例的hashCode()方法就不嫩有唯一的标识该对象。但通过identityHashCode()方法返回的hashCode值,依然是根据该对象地址计算得到的hashCode值。所以,如果两个对象的identityHashCode值相同,则两个对象绝对是同一个对象。


Runtime类

Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取与之关联的Runtime对象。

与System类似的是,Runtime也提供了gc()和runFinalization()方法来通知系统进行垃圾回收、清理系统资源,并提供了load(String filename)和loadLibrary(String libname)方法来加载文件和动态链接库。

Runtime代表Java程序的运行时环境,可以访问jvm的相关信息,如处理器数量、内存信息等。

public class RuntimeTest
{
  public static void main(String[]args)
  {
    //获取Java程序关联的运行时对象
    Runtime rt=Runtime.getRuntime();
    System.out.println("处理器数量:"+rt.availableProcessors());
    System.out.println("空闲内存数:"+rt.freeMemory());
    System.out.println("总内存数:"+rt.totalMemory());
    System.out.println("可用最大内存数:"+rt.maxMemory());
  }
}

上面程序中粗体代码就是Runtime类提供的访问JVM相关信息的方法。除此之外,Runtime类还有一个功能——它可以直接单独启动一个进程来运行操作系统的命令,如下所示:

public class ExecTest
{
  public static void main(String[]args)throws Exception
  {
    Runtime rt=Runtime.getRuntime();
    //运行记事本程序
    rt.exec("notepad.exe");
  }
}
Runtime提供了一系列exec()方法来运行操作系统命令,详见: Runtime API

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值