Java面向對象系列[v1.0.2][System類相關用法]

System類相關用法

System類提供了代表標準輸入輸出和錯誤輸出的類變量,並提供了一些靜態方法用於訪問環境變量、系統屬性的方法,還提供了加載文件和動態鏈接庫的方法

import java.io.*;
import java.util.*;

public class SystemTest
{
	public static void main(String[] args) throws Exception
	{
		// 獲取系統所有的環境變量
		Map<String, String> env = System.getenv();
		for (var name : env.keySet())
		{
			System.out.println(name + " ---> " + env.get(name));
		}
		// 獲取指定環境變量的值
		System.out.println(System.getenv("JAVA_HOME"));
		// 獲取所有的系統屬性
		Properties props = System.getProperties();
		// 將所有系統屬性保存到props.txt文件中
		props.store(new FileOutputStream("props.txt")
			, "System Properties");
		// 輸出特定的系統屬性
		System.out.println(System.getProperty("os.name"));
	}
}

System類還有兩個獲取系統當前時間的方法:currentTimeMillis()和nanoTime(),他們都返回一個long型整數,實際上他們都返回當前時間與UTC1970年1月1日0點的時間差,前者以毫秒爲單位,後者以納秒爲單位,但兩個方法返回的時間粒度取決於底層操作系統,有些系統根本不支持毫秒納秒

System類還提供了in、out、err分別代表系統的標準輸入(通常是鍵盤)、標準輸出(通常是顯示器)和錯誤輸出流,並提供了setIn()、setOut()和setErr()方法來改變系統的標準輸入、標準輸出和標準錯誤輸出流

System類還提供了一個identityHashCode(Object x)方法,該方法返回指定對象的精確hashCode值,也就是根據該對象的地址計算得到的hashCode值,當某個類的hashCode()方法被重寫後,該類實例的hashCode()方法就不能唯一地標識該對象,但通過identityHashCode()方法返回的hashCode()值依然是根據該對象的地址計算得到的hashCode值,所以如果兩個對象的identityHashCode值相同,則兩個對象絕對是同一個對象,反之則一定不是同一個對象

public class IdentityHashCodeTest
{
	public static void main(String[] args)
	{
		// 下面程序中s1和s2是兩個不同對象
		var s1 = new String("Hello");
		var s2 = new String("Hello");
		// String重寫了hashCode()方法——改爲根據字符序列計算hashCode值,
		// 因爲s1和s2的字符序列相同,所以它們的hashCode方法返回值相同
		System.out.println(s1.hashCode()
			+ "----" + s2.hashCode());
		// s1和s2是不同的字符串對象,所以它們的identityHashCode值不同
		System.out.println(System.identityHashCode(s1)
			+ "----" + System.identityHashCode(s2));
		var s3 = "Java";
		var s4 = "Java";
		// s3和s4是相同的字符串對象,所以它們的identityHashCode值相同
		System.out.println(System.identityHashCode(s3)
			+ "----" + System.identityHashCode(s4));
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章