zoukankan      html  css  js  c++  java
  • System类

    System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。

    由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。

    其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。

    1、成员变量

    System类的属性有三个,分别是系统的标准输入,标准输出和标准错误输出。

    1 public static PrintStream err;
    2 
    3 public static PrintStream in;
    4 
    5 public static PrintStream out;

    通常标准输入指的是输入设备键盘,标准输出和标准错误输出指的是输出设备屏幕,如:

    char c=System.in.read();//由键盘读入一个字节的数据送给字符变量C

    System.out.println("Hello! Guys,");//由屏幕输出一个字符串。

     

     2、成员方法

    2.1  public static long currentTimeMillis()

    返回以毫秒为单位的当前时间。

    注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。

    例如,许多操作系统以几十毫秒为单位测量时间。

    当前时间与协调世界时 1970 年 月 日午夜之间的时间差(以毫秒为单位测量)。

    该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

    例如: long l = System. currentTimeMillis();

    则获得的将是一个长整型的数字,该数字就是以差值表达的当前时间。

    使用该方法获得的时间不够直观,但是却很方便时间的计算。

    例如,计算程序运行需要的时间则可以使用如下的代码:

    1          long start = System. currentTimeMillis();
    2          for(int i = 0;i < 100000000;i++){
    3                    int a = 0;
    4          }
    5 
    6          long end = System. currentTimeMillis();
    7          long  time = end – start;

    则这里变量time的值就代表该代码中间的for循环执行需要的毫秒数,

    使用这种方式可以测试不同算法的程序的执行效率高低,也可以用于后期线程控制时的精确延时实现。

     

    2.2 arraycopy方法

    public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    该方法的作用是数组拷贝,也就是将一个数组中的内容复制到另外一个数组中的指定位置,

    由于该方法是native方法,所以性能上比使用循环高效。

    使用示例:

             int[] a = {1,2,3,4};

             int[] b = new int[5];

             System.arraycopy(a,1,b,3,2);

    该代码的作用是将数组a中,从下标为1开始,复制到数组b从下标3开始的位置,总共复制2个。

    也就是将a[1]复制给b[3],将a[2]复制给b[4],这样经过复制以后数组a中的值不发生变化,而数组b中的值将变成{0,0,0,2,3}。

    2.3 exit()方法

    public static void exit(int status)

    该方法的作用是退出程序

    其中status的值为0代表正常退出,非零代表异常退出

    使用该方法可以在图形界面编程中实现程序的退出功能等。

    2.4 gc()方法

    public static void gc()

    该方法的作用是请求系统进行垃圾回收

    至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况

    System.gc()可用于垃圾回收。

    当使用System.gc()回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源。

    在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用Object类的finalize()方法。

    finalize()方法的作用是释放一个对象占用的内存空间时,会被JVM调用。

    而子类重写该方法,就可以清理对象占用的资源,该方法有没有链式调用,所以必须手动实现。

    从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,

    通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。

    但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,

    这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好

     1 public class Person {
     2     private String name;
     3     private int age;
     4       // ... ...
     5     @Override
     6     public String toString() {
     7         return "Person [name=" + name + ", age=" + age + "]";
     8     }
     9 
    10     @Override
    11     protected void finalize() throws Throwable {
    12         System.out.println("当前的对象被回收了" + this);
    13         super.finalize();
    14     }
    15 
    16 }
    17 
    18 public class SystemDemo {
    19     public static void main(String[] args) {
    20         Person p = new Person("赵雅芝", 60);
    21         System.out.println(p);
    22 
    23         p = null; // 让p不再指定堆内存
    24         System.gc();
    25     }
    26 }

    2.5 getProperty()方法

    public static String getProperty(String key)

    该方法的作用是获得系统中属性名为key的属性对应的值。

    系统中常见的属性名以及属性的作用如下表所示。

    2.6 getProperties

    public static Properties getProperties()

    相关值的描述

    java.version

    Java 运行时环境版本

    java.vendor

    Java 运行时环境供应商

    java.vendor.url

    Java 供应商的 URL

    java.home

    Java 安装目录

    java.vm.specification.version

    Java 虚拟机规范版本

    java.vm.specification.vendor

    Java 虚拟机规范供应商

    java.vm.specification.name

    Java 虚拟机规范名称

    java.vm.version

    Java 虚拟机实现版本

    java.vm.vendor

    Java 虚拟机实现供应商

    java.vm.name

    Java 虚拟机实现名称

    java.specification.version

    Java 运行时环境规范版本

    java.specification.vendor

    Java 运行时环境规范供应商

    java.specification.name

    Java 运行时环境规范名称

    java.class.version

    Java 类格式版本号

    java.class.path

    Java 类路径

    java.library.path

    加载库时搜索的路径列表

    java.io.tmpdir

    默认的临时文件路径

    java.compiler

    要使用的 JIT 编译器的名称

    java.ext.dirs

    一个或多个扩展目录的路径

    os.name

    操作系统的名称

    os.arch

    操作系统的架构

    os.version

    操作系统的版本

    file.separator

    文件分隔符(在 UNIX 系统中是“/”)

    path.separator

    路径分隔符(在 UNIX 系统中是“:”)

    line.separator

    行分隔符(在 UNIX 系统中是“/n”)

    user.name

    用户的账户名称

    user.home

    用户的主目录

    user.dir

    用户的当前工作目录

  • 相关阅读:
    hdu1161 欧拉路
    ZOJ 3204 Connect them(字典序输出)
    [POJ1936]All in All
    [POJ1035]Spell checker
    [POJ2485]Highways
    [洛谷P3697]开心派对小火车
    【AIM Tech Round 5 (Div. 1 + Div. 2) 】
    What are the differences between an LES-SGS model and a RANS based turbulence model?
    How to permanently set $PATH on Linux/Unix?
    tar解压命令
  • 原文地址:https://www.cnblogs.com/wihainan/p/4782754.html
Copyright © 2011-2022 走看看