System類對咱們來講並不陌生,在以前學習的知識中,當咱們須要打印結果時,使用的都是"System.out.println()"語句進行打印輸出,這句代碼中就使用了System類。這個類中定義了與系統相關的屬性和方法,它所提供的屬性和方法都是靜態的,所以,想要引用這些屬性和方法,直接使用System類調用便可。下表是System類經常使用的一些方法。java
方法聲明 | 功能描述 |
static void exit(int status) | 該方法用於終止當前正在運行的Java虛擬機,其中,參數status表示狀態嗎,若狀態碼非0,則表示異常終止 |
static void gc() | 運行垃圾回收器,並對垃圾進行回收 |
static native long currentTimeMillis(); | 返回以毫秒爲單位的當前時間 |
static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length) | 從src引用的指定源數組賦值到dest引用的數組,賦值從指定的位置開始,到目標數組的指定位置結束,會覆蓋目標數組中對應位置的元素 |
static Properties getProperties() | 取得當前的系統屬性 |
static String getProperty(String key) | 獲取指定鍵描述的系統屬性 |
getProperties()方法用於獲取當前系統的所有屬性,該方法會返回一個Properties對象,其中封裝了系統的全部屬性,這些屬性是以鍵值對形式存在的。數組
Example01.java 學習
public class Example01 { public static void main(String[] args) { //獲取當前系統的屬性 Properties properties = System.getProperties(); System.out.println(properties); //獲取全部系統屬性的key(屬性名),返回Set對象 Set<String> propertyNames = properties.stringPropertyNames(); for (String key : propertyNames) { //獲取當前鍵(key)對應的值(屬性值) String value = System.getProperty(key); System.out.println(key + "---->" + value); } } }
運行結果以下:spa
該方法返回一個long類型的值,該值表示當前時間與1970年1月1日0點0時0分0秒之間的時間差,單位是毫秒,一般也將該值稱爲時間戳。操作系統
Example02.java命令行
public class Example02 { public static void main(String[] args) { long startTime = System.currentTimeMillis();//循環開始的當前時間 int sum = 0; for (int i = 0; i < 100000000; i++) { sum += i; } long endTime = System.currentTimeMillis();//循環結束後的當前時間 System.out.println("程序運行的時間爲:" + (endTime - startTime) + "毫秒"); } }
運行結果以下:設計
arraycopy()方法用於將一個數組中的元素快速拷貝到另外一個數組,其中參數的具體做用以下:3d
src:表示源數組。code
dest:表示目標數組。對象
srcPost:表示源數組中拷貝元素的起始位置。
destPos:表示拷貝到目標數組的起始位置。
length:表示拷貝元素的個數。
須要注意的是,在進行數組複製時,源數組中必須有足夠拷貝個數的元素存在,同時目標數組必須有足夠的空間來存放拷貝的元素,不然會發生角標越界異常。
Example03.java
public class Example03 { public static void main(String[] args) { int[] fromArray = {101,102,103,104,105,106};//源數組 int[] toArray = {201,202,203,204,205,206,207};//目標數組 System.arraycopy(fromArray, 2, toArray, 3, 4); //打印目標數組中的元素 for (int i = 0; i < toArray.length; i++) { System.out.println(i + ":" + toArray[i]); } } }
運行結果以下:
除了上面例子中的方法外,System類還有兩個常見的方法,分別是gc()和exit(int status)方法。其中,gc()方法用來啓動Java的垃圾回收器,而且對內存中的垃圾對象進行回收。exit(int status)方法用來終止當前正在運行的Java虛擬機,其中的參數status用於表示當前發生的異常狀態,一般指定爲0,表示正常退出,不然表示異常終止。
Runtime類表示虛擬機運行時的狀態,用於封裝虛擬機進程。每次使用Java命令啓動虛擬機都對應一個Runtime實例,而且只有一個實例,所以該類採用單例模式進行設計,對象不能夠直接實例化。若想在程序中獲取一個Runtime實例,只能經過如下方法:
Runtime run = Runtime.getRuntime();
因爲Runtime實例中封裝了虛擬機進程,所以在程序中一般會經過該類的實例對象來獲取當前虛擬機的相關信息。
Example04.java
public class Example04 { public static void main(String[] args) { Runtime rt = Runtime.getRuntime();//獲取Runtime實例 System.out.println("處理器的個數:" + rt.availableProcessors() + "個"); System.out.println("空閒內存數量:" + rt.freeMemory()/1024/1024 + "M"); System.out.println("最大可用內存數量:" + rt.maxMemory()/1024/1024 + "M"); } }
運行結果以下:
在上面的例子中,availableProcessors()方法,freeMemory()方法和maxMemory()方法分別計算當前虛擬機的處理器個數,空閒內存數和最大內存數量,單位是字節。
Runtime類提供了一個exec()方法,該方法用於執行一個dos命令,從而實現與在命令行窗口中輸入dos命令一樣的效果,例子以下:
Example05.java
public class Example05 { public static void main(String[] args) throws IOException { Runtime rt = Runtime.getRuntime();//建立Runtime實例對象 rt.exec("notepad.exe");//調用exec()方法 } }
Runtime類的exec()方法會返回一個Process對象,該對象表示操做系統的一個進程,經過該對象能夠對產生的新進程進行管理,如須要關閉進程 只須要調用destroy()方法便可。
Example06.java
public class Example06 { public static void main(String[] args) throws IOException, InterruptedException { Runtime rt = Runtime.getRuntime();//建立Runtime實例對象 Process process = rt.exec("notepad.exe");//調用exec()方法 Thread.sleep(3000);//程序休眠3秒 process.destroy();//殺掉進程 } }