System 類基本上天天用,但是平時很少去關注。
方法摘要 | |
---|---|
static void |
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 從指定源數組中複製一個數組,複製從指定的位置開始,到目標數組的指定位置結束。 |
static String |
clearProperty(String key) 移除指定鍵指示的系統屬性。 |
static Console |
console() 返回與當前 Java 虛擬機關聯的唯一 Console 對象(如果有)。 |
static long |
currentTimeMillis() 返回以毫秒爲單位的當前時間。 |
static void |
exit(int status) 終止當前正在運行的 Java 虛擬機。 |
static void |
gc() 運行垃圾回收器。 |
static Map<String,String> |
getenv() 返回一個不能修改的當前系統環境的字符串映射視圖。 |
static String |
getenv(String name) 獲取指定的環境變量值。 |
static Properties |
getProperties() 確定當前的系統屬性。 |
static String |
getProperty(String key) 獲取指定鍵指示的系統屬性。 |
static String |
getProperty(String key, String def) 獲取用指定鍵描述的系統屬性。 |
static SecurityManager |
getSecurityManager() 獲取系統安全接口。 |
static int |
identityHashCode(Object x) 返回給定對象的哈希碼,該代碼與默認的方法 hashCode() 返回的代碼一樣,無論給定對象的類是否重寫 hashCode()。 |
static Channel |
inheritedChannel() 返回從創建此 Java 虛擬機的實體中繼承的信道。 |
static void |
load(String filename) 從作爲動態庫的本地文件系統中以指定的文件名加載代碼文件。 |
static void |
loadLibrary(String libname) 加載由 libname 參數指定的系統庫。 |
static String |
mapLibraryName(String libname) 將一個庫名稱映射到特定於平臺的、表示本機庫的字符串中。 |
static long |
nanoTime() 返回最準確的可用系統計時器的當前值,以毫微秒爲單位。 |
static void |
runFinalization() 運行處於掛起終止狀態的所有對象的終止方法。 |
static void |
runFinalizersOnExit(boolean value) 已過時。 該方法具有固有的不安全性。它可能對正在使用的對象調用終結方法,而其他線程同時正在操作這些對象,從而導致不正確的行爲或死鎖。 |
static void |
setErr(PrintStream err) 重新分配“標準”錯誤輸出流。 |
static void |
setIn(InputStream in) 重新分配“標準”輸入流。 |
static void |
setOut(PrintStream out) 重新分配“標準”輸出流。 |
static void |
setProperties(Properties props) 將系統屬性設置爲 Properties 參數。 |
static String |
setProperty(String key, String value) 設置指定鍵指示的系統屬性。 |
static void |
setSecurityManager(SecurityManager s) 設置系統安全性。 |
使用很簡單,主要來看看 getProperties() 方法:
public static void main(String[] args) {
Properties properties = System.getProperties();
Set<Object> objects = properties.keySet();
objects.forEach(obj-> System.out.println(obj));
}
輸出結果有很多屬性,在 java的System類常用方法中一一解釋了:
來看幾個有趣的屬性:
public static void main(String[] args) {
/* Properties properties = System.getProperties();
Set<Object> objects = properties.keySet();
objects.forEach(obj-> System.out.println(obj));*/
String s1 = System.getProperty("user.dir");
String s2 = System.getProperty("file.separator");
System.out.println("user.dir--->"+s1);
System.out.println("file.separator--->"+s2);
}
輸出結果:
user.dir--->C:\Users\Dongguabai\Downloads\demo
file.separator--->\
先看 user.dir,輸出的結果就是當前工作的目錄,與 idea 這裏的目錄相同:
一個很常見的應用就是可以獲取當前工程的 classes 絕對路徑:
String classesPath = System.getProperty("user.dir")
+ File.separator + "target" + File.separator + "classes";
因爲在嵌入式 Servlet 容器的時候,是需要獲取classpath 的。
還有一個就是 file.separator,因爲不同系統的文件分隔符是不一樣的,這個就類似於 File.separator。
參考資料:
https://blog.csdn.net/weixin_41547486/article/details/79583737