1. 程式人生 > >Java System 類

Java System 類

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