首页 > 编程笔记 > Java笔记 阅读:4

Java System类的常用方法(附带实例)

System 类对于大家来说其实并不陌生,向控制台打印信息的 System.out.println() 方法就是 System 类提供的。

System 类位于 java.lang 包中,没有构造方法,提供了大量的静态方法,可以获取与系统相关的信息以及系统级操作。本节将介绍该类的常用方法。

System currentTimeMillis()方法

currentTimeMillis() 方法的声明语句是:
static long currentTimeMillis();
该方法用于获取当前系统时间,返回的是毫秒值,表示系统当前时间距离标准基准时间(1970-01-01 00:00:00)的毫秒数。

例如:
public class TimeExample {
    public static void main(String[] args) {
        // 获取当前时间的毫秒值
        long startTime = System.currentTimeMillis();

        // 模拟一些操作,例如让程序暂停一段时间
        try {
            Thread.sleep(2000); // 让程序暂停2秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 再次获取当前时间的毫秒值
        long endTime = System.currentTimeMillis();

        // 计算经过的时间(毫秒)
        long duration = endTime - startTime;

        // 输出经过的时间
        System.out.println("经过的时间(毫秒): " + duration);
    }
}
运行结果为:

经过的时间(毫秒): 2001

System arraycopy()方法

arraycopy() 方法的声明语句是:
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
该方法可将数组中指定的数据复制到另一个数组中。其中,src 为源数据,srcPos 为源数据中的开始位置,dest 为目标数组,destPos 为目标数据中的开始位置,length 为要复制的数组元素的数量。

接下来,通过案例来演示 arraycopy() 方法的使用:
import java.util.Arrays;

public class Demo {
    public static void main(String[] args) {
        int[] src = new int[]{11, 22, 33, 44, 55, 66};    // 源数组
        int[] dest = new int[]{111, 222, 333, 444};       // 目标数组
        System.out.println("源数组:" + Arrays.toString(src));
        System.out.println("目标数组复制前内容:" + Arrays.toString(dest));
        System.arraycopy(src, 2, dest, 1, 2);              // 调用 arraycopy() 方法
        System.out.println("目标数组复制后内容:" + Arrays.toString(dest));
    }
}
程序的运行结果如下:

源数组:[11, 22, 33, 44, 55, 66]
目标数组复制前内容:[111, 222, 333, 444]
目标数组复制后内容:[111, 33, 44, 444]

从结果可以看出,arraycopy() 方法从源数组复制数据并放到目标数组中,会覆盖目标数组中原来位置的内容,并不是插入。

System gc()方法

gc() 方法的声明语句是:
static void gc();
该方法用来建议 JVM 赶快启动垃圾回收器。只是建议启动,JVM 是否启动又是另外一回事。

接下来,通过案例来演示 gc() 方法的使用:
class Student {
    String name;
    public Student(String name) {
        this.name = name;
    }
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println(name + "被回收了");
    }
}

public class Demo {
    public static void main(String[] args) {
        for (int i = 1; i <= 8; i++) {
            new Student("对象" + i);
            System.gc();
        }
    }
}
程序的运行结果如下:

对象1被回收了
对象3被回收了
对象4被回收了
对象2被回收了
对象5被回收了
对象6被回收了
对象7被回收了
对象8被回收了

程序中通过循环语句多次调用 gc() 方法是因为它仅仅是建议回收,不一定能触发垃圾回收机制,因此多调用几次加大触发的概率。

注意,finalize() 方法是 Object 类的一个方法,此处 Student 类将其重写,这个方法会在垃圾回收时被调用。

System getProperty()方法

getProperty() 方法的声明语句是:
static String getProperty(String key);
该方法用于根据系统的属性名获取对应的属性值。接下来,通过案例来演示 getProperty() 方法的使用。
public class Demo {
    public static void main(String[] args) {
        String osName = System.getProperty("os.name");
        System.out.println("操作系统的类型:" + osName);
        String javaHome = System.getProperty("java.home");
        System.out.println("JDK的根路径:" + javaHome);
        String pathStr = System.getProperty("java.vm.version");
        System.out.println("JVM虚拟机版本:" + pathStr);
    }
}
程序的运行结果如下:
操作系统的类型:Windows 10
JDK的根路径:C:\Program Files\Java\jdk-15.0.2
JVM虚拟机版本:15.0.2+7-27
程序中 JDK 的路径和安装路径有关,如果安装路径更改则这个路径输出会与本文不一致。

这个案例只输出了 3 个属性值,实际有很多,大家可以根据需要更改属性名来获取不同的属性值。

System exit()方法

exit() 方法的声明语句是:
static void exit(int status);
该方法用于退出 JVM,参数为 0 表示正常退出,非 0 表示异常退出。退出 JVM 后,后面的代码将不再执行。无论参数传 0 还是传 1,JVM 都会退出。

相关文章