美文网首页
详解 System 与 Runtime

详解 System 与 Runtime

作者: Lstone | 来源:发表于2017-01-18 16:52 被阅读81次

java 程序在不同的操作系统上运行的时候,可能需要获取平台相关属性,或者调用相关命令来完成特定功能. java提供了System 和 Runtime 供我们使用。

System 类

System 类提供了一些有用的类方法和字段.System 提供了标准的输入,输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库方法,还有快速复制数组的一部分使用方法.

  • getEnv() 可获得 java 程序运行平台环境变量
    public static void printEnv(){
    Map<String , String> envs =System.getenv();
    for(String envKeys : envs.keySet()){
    System.out.println("环境变量 Key:"+envKeys+" :"+"环境变量 value"+envs.get(envKeys));
    }
    }

  • getProperties() 可获得当前运行平台的一些属性,例如: 系统版本 ,java 版本 ,默认字符编码等信息

    public static void printProp(){
     Properties prop =System.getProperties();
    
     for(String key : prop.stringPropertyNames()){
         System.out.println("平台属性 Key:"+key+" :"+"平台属性 value"+ prop.getProperty(key));
     }
    }
    
  • currentTimeMillis() 和 nanoTime() 的区别?

上面两个返回的都是一个 long 类型整数,实际上返回的都是当前时间与 UTC 1970 年1月1日午夜的时间差,前者是以毫秒为单位,后者是以纳秒为单位.

  • System 类中 identityHashCode(Obejct obj) 方法,这个方法能够输出一个对象的 hashCode,通常一个类的hashCode()方法返回的是该对象在内存中的地址,也有很多类重写了 hashCode 方法,所以通过obj.hashCode()方法得到的不一定是内存中的地址. identityHashCode(obj)方法返回的就是 obj 对象在内存中的地址,因此只要两个对象调用identityHashCode()方法返回的值一样,那么这两个对象一定是同一个对象,两个对象的 hashCode()方法返回的值一样,这两个对象不一定是同一个对象.

    public static void identityHashCode(){
      String str1 = new String("System");
      String str2 = new String("System");
      
      String str3 = "System";     
      String str4 = "System";
      //两个值 hashCode不同
      System.out.println("str1 和 str2"+System.identityHashCode(str1) +"    "+System.identityHashCode(str2));
      //两个值 hashCode值相同
      System.out.println("str3 和 str4"+System.identityHashCode(str3) +"    "+System.identityHashCode(str4));  
      //两个对象不相等
      System.out.println("str1 == str2 ?"+(str1 == str2));
      //两个对象相等
      System.out.println("str3 == str4 ?"+(str3 == str4));
    }
    
  • String str1 = "123" 和 String str2 = new String("123");

str1被创建以后,对象会放到一个常量池中,当再次创建 "123"变量的时候,会优先去常量池中查找,如果常量池中存在该字符串序列,那么将不会存在新的字符串对象.如果不存在,那么将创建一个新的字符串对象,并放到字符串常量池中. 而 str2 创建的对象存放在堆中,没次使用 new 创建字符串的时候,都会创建一个新的字符串对象.

Runtime 类

每一个 java 程序都有一个 Runtime 类的实例.例如:每一个 android 程序都是在一个单独的虚拟机中执行的,每个虚拟机都是操作系统的一个独立进程.能够是应用程序与运行时环境相连接,我们只能通过 getRuntime 方法获取当前的运行时,应用程序不能够创建自己的 Runtime 实例,Runtime 提供主要有两大功能:

  1. 通过 Runtime 我们可以获得运行时环境Java虚拟机的一些 运行时信息
    System.out.println("可用处理器数目:"+runtime.availableProcessors());
    System.out.println("java 虚拟机的内存总量::"+runtime.totalMemory());
    System.out.println("当前空闲的内存:"+runtime.freeMemory());

  2. Runtime还可以单独启动一个进程来运行操作系统的命令
    //Process process = runtime.exec("ls -al"); //两种方式执行命令
    Process process = runtime.exec(new String[]{"ls","-al"});
    //命令执行结果我们可以通过接收一个输入流来接收
    InputStream inputStream = process.getInputStream();
    byte[] b = new byte[1024];
    inputStream.read(b);
    System.out.println("命令执行结果:"+new String(b));

相关文章

网友评论

      本文标题:详解 System 与 Runtime

      本文链接:https://www.haomeiwen.com/subject/itovbttx.html