System类与Runtime类

一、System类

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

1. 成员变量

System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

out与err的区别
  • System.out在JVM和操作系统都具有缓存功能,就是输出的数据不一定实时输出,有时候会积攒到一定数量才会输出;System.err会实时输出。

    System.out.println("out输出Java");
    System.err.println("err输出Python");
    System.out.println("out输出C++");
    

    输出结果1:
    在这里插入图片描述
    输出结果2:
    在这里插入图片描述
    由于System.out不是实时输出的,所以直观地造成System.err输出位置的不确定性。

  • 如果使用了log4j的日志记录,System.err会被记入日志,System.out不会。

  • System.out是通常输出信息的方式,System.err是用在显示错误信息或者system.out被重定向以后,需要立即让用户注意到的信息的输出

2. 成员方法

  1. static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
    该方法的作用是数组拷贝,src为被拷贝的数组,srcPos为src要拷贝的初始位置,dest为目的数组,目的数组dest放置拷贝数据的初始位置,length为从src拷贝到的数据长度。

    代码示例

    int[] srcArr = {20, 23, 45, 12, 17, 8};
    int[] destArr = new int[5];
    
    System.arraycopy(srcArr, 1, destArr, 2, 2);
    
    System.out.println(Arrays.toString(srcArr));	//[20, 23, 45, 12, 17, 8]
    System.out.println(Arrays.toString(destArr));	//[0, 0, 23, 45, 0]
    

    注意:执行拷贝之后,源数组不发生变化,而目的数组发生变化。

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

  3. static void exit(int status)
    该方法的作用是退出程序。其中status的值为0代表正常退出非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。

  4. static void gc()
    请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。

  5. static Properties getProperties()
    获取系统的属性信息,并存储到Properties集合中。Properties集合中存储的都是String类型的键值对。

  6. static String getProperty(String key)
    获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
    在这里插入图片描述
    代码示例

    //获取操作系统名称
    String osName = System.getProperty("os.name");
    //获取操作系统版本
    String osVersion = System.getenv("os.version");
    
    System.out.println("操作系统名:" + osName);	//Windows 10
    
    System.out.println("操作系统版本:" + osVersion);	//null
    
  7. static String setProperty(String key, String value)
    给系统设置一些属性信息,这些信息是全局的,其他程序都可以使用

二、Runtime类

Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。另外该类无法创建对象。

常用方法

  1. static Runtime getRuntime()
    返回一个Runtime实例
  2. Process exec(String command)
    指定某个exe文件并返回该程序进程,参数command为本地exe文件路径。

代码示例

Runtime runtime = Runtime.getRuntime();
Process notepadProcess = runtime.exec("C:\\\\Windows\\\\notepad.exe");//打开记事本程序
//三秒后关闭该记事本进程
Thread.sleep(3000);
notepadProcess.destroy();
  1. long freeMemory()
    返回Java虚拟机中的空闲内存量,以字节为单位
  2. long maxMemory()
    返回Java虚拟机试图使用的最大内存量
  3. long totalMemory()
    返回Java虚拟机中的内存总量

代码示例

Runtime runtime = Runtime.getRuntime();
long freeMemory = runtime.freeMemory();
long totalMemory = runtime.totalMemory();
long maxMemory = runtime.maxMemory();

System.out.println("虚拟机空闲内存量:" + freeMemory);
System.out.println("虚拟机内存总量:" + totalMemory);
System.out.println("虚拟机试图使用的最大内存量:" + maxMemory);

运行结果

虚拟机空闲内存量:126930080
虚拟机内存总量:128974848
虚拟机试图使用的最大内存量:1890582528

参考文章:
https://www.cnblogs.com/xuhuan/articles/1522212.html
https://blog.csdn.net/zhuwei1035838807/article/details/79464603

猜你喜欢

转载自blog.csdn.net/weixin_40374341/article/details/86352453