多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # system类 ## 概念 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作。 System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。在JDK中,有许多这样的类。 ## 常用方法 ![](https://box.kancloud.cn/097e45702d98816aacdd616feafa2edf_899x381.png) ~~~ * currentTimeMillis() 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值 * exit(int status) 用来结束正在运行的Java程序。参数传入一个数字即可。通常传入0记为正常状态,其他为异常状态 * gc() 用来运行JVM中的垃圾回收器,完成内存中垃圾的清除。从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。 但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好.这个会间接调用Runtime的gc方法 * getProperty(String key) 用来获取指定键(字符串名称)中所记录的系统属性信息 ~~~ System.out.println(System.getProperties()); ![](https://box.kancloud.cn/fb3be82cd3187161940f9c04501d478c_783x863.png) ![](https://box.kancloud.cn/c115226f014f52179c92545b28d89024_908x319.png) * arraycopy方法,用来实现将源数组部分元素复制到目标数组的指定位置 ![](https://box.kancloud.cn/9ac482df2fc6b5fa80dcd1429333a84b_927x156.png) 例子: 将src数组中前3个元素,复制到dest数组的前3个位置上 复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10] 复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10] ~~~ public static void main(String[] args) { int[] src = new int[]{1,2,3,4,5}; int[] dest = new int[]{6,7,8,9,10}; System.arraycopy( src, 0, dest, 0, 3); //代码运行后:两个数组中的元素发生了变化 //src数组元素[1,2,3,4,5] //dest数组元素[1,2,3,9,10] } ~~~ # System.getenv()和System.getProperty()的区别 System.getenv() 方法是获取指定的环境变量的值。 它有两种方法,一种是接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null。另外一种是不接受参数,那么返回的是所有的环境变量。下面是它们的源码 **接收参数为任意字符串** ~~~ public static String getenv(String name) { SecurityManager sm = getSecurityManager(); if (sm != null) { sm.checkPermission(new RuntimePermission("getenv."+name)); } return ProcessEnvironment.getenv(name); } ~~~ **不接受参数** ~~~ public static java.util.Map<String,String> getenv() { SecurityManager sm = getSecurityManager(); if (sm != null) { sm.checkPermission(new RuntimePermission("getenv.*")); } return ProcessEnvironment.getenv(); } ~~~ **注意**:环境变量的修改的两种情况:修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动计算机;但是,如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)。 System.getProperty() 是获取系统的相关属性,包括文件编码、操作系统名称、区域、用户名等,此属性一般由jvm自动获取,不能设置。 这个必须接受一个String类型的参数,返回值的类型也是String,如果想获取所有的系统的相关属性值可以使用System.getProperties()