JAVA中的System类

Java中的System类

`System`类是Java中的一个预定义类,它属于`java.lang`包,因此无需显式导入即可使用。该类提供了一系列用于访问系统资源的静态方法和变量。这些资源包括标准输入、输出和错误流,以及访问环境变量和加载库的方法。

主要方法和功能

1. 标准输入输出和错误流

  •    `System.out`:用于打印输出到标准输出设备(通常是控制台)。
  •    `System.err`:用于打印错误消息到标准错误设备(也是控制台,但通常用于区分正常输出和错误信息)。
  •    `System.in`:用于从标准输入设备(如键盘)读取数据。

2. 环境变量

  •    `getenv()`:用于获取指定的环境变量值。
  •    `getenv()`(无参数):获取所有环境变量的不可修改映射。

3. 系统属性

  •    `getProperty(String key)`:获取系统属性的值。
  •    `getProperty(String key, String def)`:获取系统属性的值,如果属性不存在,则返回默认值。
  •    `setProperties(Properties props)`:设置系统属性。这通常不推荐,因为大多数系统属性在JVM启动时就已经设置好了。

4. 其他实用方法

  •    `arraycopy(Object src, int srcPos, Object dest, int destPos, int length)`:这是一个静态方法,用于在数组之间进行复制。尽管它不是`System`类特有的,但因为它非常有用,所以经常与`System`类一起提及。
  •    `currentTimeMillis()`:返回自1970年1月1日00:00:00 GMT以来的毫秒数。
  •    `exit(int status)`:终止当前运行的Java虚拟机。参数`status`用于表示退出状态;按照惯例,非零值表示异常终止。
  •    `gc()`:请求垃圾收集器运行。但是,请注意,这只是一个请求,JVM可以忽略它。
  •    `identityHashCode(Object x)`:返回给定对象的“系统身份哈希码”。这个哈希码是由JVM为对象内部使用的,并且在对象的生命周期内保持不变。

代码示例和注释

标准输入输出示例


 

public class SystemIOTest {
    public static void main(String[] args) {
        // 向标准输出打印消息
        System.out.println("Hello, World!");

        // 从标准输入读取一行文本
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter your name: ");
        String name = scanner.nextLine();

        // 向标准输出打印用户输入
        System.out.println("Hello, " + name + "!");

        // 关闭scanner
        scanner.close();
    }
}

访问环境变量

public class SystemEnvTest {
    public static void main(String[] args) {
        // 获取名为"PATH"的环境变量值
        String path = System.getenv("PATH");
        if (path != null) {
            System.out.println("PATH environment variable: " + path);
        } else {
            System.out.println("PATH environment variable is not set.");
        }

        // 获取所有环境变量
        Map<String, String> env = System.getenv();
        for (Map.Entry<String, String> entry : env.entrySet()) {
            System.out.println(entry.getKey() + "=" + entry.getValue());
        }
    }
}


 

访问系统属性

public class SystemPropertiesTest {
    public static void main(String[] args) {
        // 获取Java运行时环境的版本
        String javaVersion = System.getProperty("java.version");
        System.out.println("Java Version: " + javaVersion);

        // 尝试获取一个不存在的属性,并提供默认值
        String nonExistentProperty = System.getProperty("non.existent.property", "Default Value");
        System.out.println("Non-existent Property: " + nonExistentProperty);

        // 注意:修改系统属性通常不是个好主意,这里只是展示如何做到
        // System.setProperty("some.property", "newValue");
    }
}

垃圾收集和系统退出

public class SystemGCExample {
    public static void main(String[] args) {
        // 创建一个很大的数组来模拟垃圾回收压力
        byte[] largeArray = new byte[1024 * 1024]; // 1MB array
        
        // 调用gc()方法请求垃圾收集器运行
        System.gc();
        System.out.println("GC has been called, but it may not run immediately.");

        // Exit the application after a delay to ensure the output is visible.
        try {
            TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {
            System.out.println("Sleep interrupted.");
        }

        // 退出程序,这里使用0作为状态码表示正常退出
        System.exit(0);
    }
}


 

请注意,`System.exit(int status)`方法一旦调用,将立即停止Java应用程序,不会等待其他线程完成。任何在`System.exit()`之后执行的代码都不会执行。因此,上面的代码实际上不会打印出“GC has been called...”这行输出,因为程序在调用`System.exit(0)`后立即退出了。在实际应用中,不应该在程序退出前调用`System.gc()`,因为这会打断正常的垃圾回收过程。

以上代码片段展示了`System`类中一些常见的方法和功能。尽管`System`类包含的方法不是最丰富的,但它们提供了访问系统资源和进行基本系统管理的强大工具。当需要与系统环境变量、属性、输入输出流等交互时,`System`类将是一个非常有用的工具。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值