System类是Java核心库中的一部分,提供了与系统环境交互的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。
下面是System类的一些常用方法和字段:
- out:表示标准输出流(即控制台输出),是一个PrintStream对象。可以使用System.out.println()来向控制台输出内容。
- in:表示标准输入流(即控制台输入),是一个InputStream对象。可以使用其他输入流对象(如Scanner)来替代。
- err:表示标准错误流,是一个PrintStream对象。可以使用System.err.println()来向控制台输出错误信息。
- currentTimeMillis():返回当前时间的毫秒值,通常用于计算程序执行的时间或生成唯一的时间戳。
- arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定范围的元素复制到另一个数组中。
- getProperties():取得当前的系统属性
- getProperty(String key):根据指定的系统属性名获取对应的系统属性值。
- exit(int status):终止当前正在运行的Java虚拟机。
- gc():运行垃圾回收器,建议JVM进行垃圾回收。
arraycopy()方法
arraycopy()方法用于将数组从源数组复制到目标数组,声明格式如下:
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
关于声明格式中参数的相关介绍如下:
src
:源数组srcPos
:源数组的起始位置索引dest
:目标数组destPos
:目标数组的起始位置索引length
:要复制的元素个数
- 注意:
- arraycopy()方法是用浅拷贝的方式进行复制,按照指定位置范围逐个元素地复制数组中的值,如果需要进行深拷贝,可以使用其他方法或循环遍历数组进行逐个复制。
- 在进行数组复制时,目标数组必须有足够的空间来存放拷贝的元素,否则会发生角标越界异常。
- 接下来通过一个案例演示数组元素的拷贝。
public class myclass { public static void main(String[] args) { int[] sourceArray = {1, 2, 3, 4, 5}; int[] destinationArray = new int[5]; // 使用arraycopy()方法将sourceArray的内容复制到destinationArray中 System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length); // 打印destinationArray的内容 for (int i = 0; i < destinationArray.length; i++) { System.out.print(destinationArray[i] + " "); //运行结果:1 2 3 4 5 } } }
currentTimeMillis()方法
- currentTimeMillis()方法用于获取当前系统的时间,返回值是long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,通常也将该值称作时间戳。
- 接下来通过一个案例演示如何使用
currentTimeMillis()
方法获取当前时间戳: -
import java.text.SimpleDateFormat; import java.util.Date; public class myclass { public static void main(String[] args) { // 获取当前时间戳 long timestamp = System.currentTimeMillis(); // 将时间戳转换为可读的日期时间字符串 String dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(timestamp)); // 输出当前时间戳和日期时间 System.out.println("当前时间戳:" + timestamp); System.out.println("当前日期时间:" + dateTime); } }
运行以上代码,将输出当前时间戳和对应的日期时间,例如:
当前时间戳:1691973658054 当前日期时间:2023-08-14 08:40:58
getProperties()和getProperty()方法
- System类的getProperties()方法用于获取当前系统的全部属性,该方法会返回一个Properties对象,其中封装了系统的所有属性,这些属性是以键值对形式存在的。getProperty() 方法用于根据系统的属性名获取对应的属性值。
- 接下来通过一个案例演示如何使用
getProperties()
和getProperty()
方法获取系统属性: -
import java.util.Properties; public class myclass { public static void main(String[] args) { // 获取所有系统属性信息 Properties properties = System.getProperties(); // 打印所有系统属性 System.out.println("=== 系统属性 ==="); for (String key : properties.stringPropertyNames()) { String value = properties.getProperty(key); System.out.println(key + " = " + value); } System.out.println("================\n"); // 获取特定系统属性值 String javaVersion = System.getProperty("java.version"); String osName = System.getProperty("os.name"); String userName = System.getProperty("user.name"); // 打印特定系统属性值 System.out.println("Java 版本:" + javaVersion); System.out.println("操作系统:" + osName); System.out.println("当前用户:" + userName); } }
gc()方法
-
gc()方法是Java中的一个静态方法,用于请求进行垃圾回收(Garbage Collection)。
垃圾回收是Java自动内存管理的一部分,它负责释放不再使用的内存资源,以便重新分配给其他对象。当没有对一个对象的引用时,该对象就成为可回收的垃圾(即无法被访问和使用的对象),垃圾回收器会在适当的时机自动回收这些对象所占用的内存空间。
虽然Java的垃圾回收机制是自动进行的,但是开发者可以使用gc()方法来显式地请求系统进行垃圾回收。调用gc()方法并不保证立即执行垃圾回收,而是只是向系统建议进行回收操作。具体的垃圾回收行为和频率由Java虚拟机(JVM)和垃圾回收器的算法决定。
接下来通过一个案例演示如何使用gc()方法进行垃圾回收: -
public class myclass { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); // 打印初始内存情况 long initialMemory = runtime.totalMemory() - runtime.freeMemory(); System.out.println("初始内存使用量: " + initialMemory); // 创建大量对象 for (int i = 0; i < 100000; i++) { new Object(); } // 打印创建对象后的内存情况 long memoryAfterAllocation = runtime.totalMemory() - runtime.freeMemory(); System.out.println("分配对象后内存使用量: " + memoryAfterAllocation); // 执行垃圾回收 runtime.gc(); // 打印垃圾回收后的内存情况 long memoryAfterGC = runtime.totalMemory() - runtime.freeMemory(); System.out.println("垃圾回收后内存使用量: " + memoryAfterGC); } }
exit()方法
exit(int status)
方法是System
类中的一个常见方法,用于终止当前正在运行的Java虚拟机。- 该方法接受一个整数参数
status
,表示当前的退出状态。通常情况下,如果status
值为0,表示正常退出;其他非零的status
值则代表异常终止,可以用来指示不同的错误状态或异常情况。 - 接下来通过一个案例演示如何使用exit()方法在Java程序中终止虚拟机:
-
public class myclass { public static void main(String[] args) { System.out.println("开始执行程序"); boolean someCondition = false; //boolean someCondition = true; // 模拟某种条件发生时需要退出程序 if (someCondition) { System.out.println("发生异常,程序即将异常终止"); System.exit(1); // 非零的状态码表示异常终止 } // 正常执行的代码 System.out.println("程序正常结束"); System.exit(0); // 0 表示正常退出 } }
运行以上代码,结果为:
开始执行程序 程序正常结束