Java基础教程——System类

一笑奈何 提交于 2019-12-18 09:27:13

System类

java.lang.System类代表当前Java程序的运行平台。

|-可以做输入输出,垃圾回收;(此处不讲)
|-可以获取时间;
|-可以获取环境变量;
|-可以获取系统信息;
|-可以获取对象的原始HashCode。(比如String类就改写了hashCode方法,不能唯一地标识一个对象)

获取时间

public class System1时间 {
    public static void main(String[] args) {
        System.out.println("--currentTimeMillis():UTC(世界标准时间) 1970.1.1开始到现在的时间差");
        System.out.println("毫秒:" + System.currentTimeMillis());
        System.out.println("nanoTime()只能用于测量已过的时间");
        System.out.println("纳秒:" + System.nanoTime());
    }
}

System.currentTimeMillis()可以用户计算一段代码运行所消耗的时间。

System.nanoTime()精确度太高,硬件环境不一定能精确到纳秒,因此这个方法并不常用。


获取环境变量

import java.util.Map;
public class System2环境变量 {
    public static void main(String[] args) {
        String _环境变量名 = "JAVA_HOME";
        System.out.println(_环境变量名 + " = " + System.getenv(_环境变量名));
        System.out.println("-----环境变量(全部)-----");
        Map<String, String> env = System.getenv();
        for (String name : env.keySet()) {
            System.out.println(name + " = " + env.get(name));
        }
    }
}

获取系统信息

import java.util.Properties;
public class System3getProperty {
    public static void main(String[] args) {
        System.out.println(System.getProperty("os.name"));
        System.out.println(System.getProperty("user.dir"));// 用户工作路径
        System.out.println("-----System Property(ALL)-----");
        Properties props = System.getProperties();
        for (Object k : props.keySet()) {
            String v = props.getProperty(k.toString());
            System.out.println(k);
            System.out.println(k + " = " + v);
        }
    }
}

获取对象的原始HashCode

(比如String类就改写了hashCode方法,不能唯一地标识一个对象)

public class System4IdentityHashCode {
    public static void main(String[] args) {
        System.out.println("---identityHashCode():不同对象,此结果必不同---");
        System.out.println("---因为hashCode()可能被重写(比如String类),无法准确确定对象---");
        // s1和s2是两个不同对象
        String s1 = new String("Hello");
        String s2 = new String("Hello");
        // String重写了hashCode()方法——改为“根据字符序列计算hashCode值”,
        // 因为s1和s2的字符序列相同,所以它们的hashCode()相同
        // (和equals无关,equals不是根据hashCode判断,但是也是根据字符序列比较,殊途同归)
        System.out.println("new String 1.hashCode() = " + s1.hashCode());
        System.out.println("new String 2.hashCode() = " + s2.hashCode());
        // s1和s2是不同的字符串对象,所以它们的identityHashCode值不同
        System.out.println("new String 1.identityHashCode() = " + System.identityHashCode(s1));
        System.out.println("new String 2.identityHashCode() = " + System.identityHashCode(s2));
        String s3 = "Java";
        String s4 = "Java";
        // s3和s4是相同的字符串对象,所以它们的identityHashCode值相同
        System.out.println("String 3.identityHashCode() = " + System.identityHashCode(s3));
        System.out.println("String 4.identityHashCode() = " + System.identityHashCode(s4));
    }
}

运行结果(每次运行的结果可能不同)

---identityHashCode():不同对象,此结果必不同---
---因为hashCode()可能被重写(比如String类),无法准确确定对象---
new String 1.hashCode() = 69609650
new String 2.hashCode() = 69609650
new String 1.identityHashCode() = 366712642
new String 2.identityHashCode() = 1829164700
String 3.identityHashCode() = 2018699554
String 4.identityHashCode() = 2018699554
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!