本節介紹一下java中那些常用的類,包括:系統相關類(System、Runtime)、日期時間類(Date等)、Object、Math、Random、File、枚舉類(Enum)
1.系統相關類
-
System類
- System類是一些與系統相關的屬性和方法的集合,且System類中所有的屬性和方法都是靜態的,要想引用這些屬性和方法,直接使用System類調用即可。
- System類的構造方法是private修飾的,所以不能創建該類的實例對象,但是可以通過類名直接調用。
- System類還被final關鍵字修飾,所以不能被繼承。
1.System類的成員變量
- in:標准輸入流(鍵盤輸入),InputStream類型
- out:標准輸出流(顯示器輸出),PrintStream類型
- err:標准錯誤輸出流(顯示器輸出),PrintStream類型
1 System.out.println("hello world");
2.System類的成員方法
-
getProperty方法:獲取系統的屬性信息,常見的屬性名以及屬性說明如下表所示
屬性名 | 屬性說明 |
java.version | jdk版本 |
java.home | jdk安裝目錄 |
os.name | 操作系統名稱 |
os.version | 操作系統版本 |
user.home | 用戶宿主目錄 |
user.name | 用戶名稱 |
user.dir | 當前工作目錄 |
代碼示例:
1 System.out.println("jdk版本:"+System.getProperty("java.version")); 2 System.out.println("操作系統:"+System.getProperty("os.name")); 3 System.out.println("用戶:"+System.getProperty("user.name")); 4 System.out.println("用戶目錄:"+System.getProperty("user.home")); 5 System.out.println("當前工作目錄:"+System.getProperty("user.dir"));
-
currentTimeMillis方法:獲取當前的計算機時間,時間的表達格式為當前計算機時間和GMT時間(格林威治時間)1970年1月1號0時0分0秒所差的毫秒數。
1 Long ctime = System.currentTimeMillis(); 2 System.out.println("系統當前時間:"+ctime);//系統當前時間:1509009739936
-
arraycopy方法:進行數組拷貝,也就是將一個數組中的內容復制到另外一個數組中的指定位置,由於該方法是native方法,所以性能上比使用循環高效。(ArrayList的插入和刪除操作就是調用System類的arraycopy方法實現的)
1 //將數組按指定要求進行復制 2 char[] a = {'A','B','C','D'}; 3 char[] b = {'1','2','3','4','5'}; 4 /* 5 * 將原數組a從第1個索引開始復制到目標數組b的第2個索引開始的位置,一共復制2個元素 6 * 即是將a[1]復制給b[2],a[2]復制給b[3],所以最終為1 2 B C 5 7 */ 8 System.arraycopy(a, 1, b, 2, 2); 9 for (int i = 0; i < b.length; i++) { 10 System.out.print(b[i]+" "); 11 }//1 2 B C 5
-
gc方法:請求系統進行垃圾回收,相當於給GC加上了優先級。至於系統是否立刻回收,則取決於系統中垃圾回收算法的實現以及系統執行時的情況,這個方法只是對Runtime類中的gc方法進行了一次包裝。
1 //請求垃圾回收 2 System.gc();
-
exit方法:退出程序,其中status的值為0代表正常退出,非零代表異常退出。使用該方法可以在圖形界面編程中實現程序的退出功能等。
-
Runtime類
這里首先給出Runtime類的一些總結:
- Runtime類封裝了程序運行時的環境,每個java應用程序都有一個Runtime類的實例,使得應用程序能夠與運行時的環境相連接。
- 和System類一樣,不能創建Runtime類的實例對象(構造方法私有的),但是能夠通過getRuntime靜態方法獲取該對象的一個引用。
- 一旦得到了一個當前Runtime類的引用,就可以通過調用Runtime對象的成員方法來控制JVM的狀態和行為。
1.Runtime類的內存管理
Runtime類代表了java程序的運行環境,通過Runtime類可以訪問JVM的相關信息,如處理器數量、內存信息等等。另外還有Runtime類的gc方法,通知JVM進行垃圾回收,這是一個native方法,由C語言實現。
1 //獲取java程序關聯的運行時對象 2 Runtime runtime = Runtime.getRuntime(); 3 4 System.out.println("處理器數量:"+runtime.availableProcessors()); 5 System.out.println("空閑內存數:"+runtime.freeMemory()); 6 System.out.println("總內存數:"+runtime.totalMemory()); 7 System.out.println("最大可用內存數:"+runtime.maxMemory());
2.Runtime類執行其他程序
除了能夠獲取JVM的信息之外,Runtime類還可以直接單獨啟動一條進程來運行操作系統的命令,主要調用exec這個成員方法來實現。
- exec方法返回一個Process對象,可以使用這個對象來控制java程序與新運行的進程來進行交互操作。
- exec方法的本質是依賴於環境。
- Runtime提供了系列exec方法來運行操作系統的命令,關於它們的用法和差別可以查閱API文檔。
1 //獲取java程序關聯的運行時對象 2 Runtime runtime = Runtime.getRuntime(); 3 4 //運行記事本程序 5 runtime.exec("notepad.exe");
2.日期時間類
java提供了一系列用於處理日期、時間的類,包括創建日期、時間對象,獲取系統當前日期、時間等的操作。
-
Date類
java提供了Date類來處理日期和時間,這里介紹的是java.util包下的Date類,而不是java.sql包下的Date類。由於這個Date類的歷史悠久,所以大部分構造器、成員方法已經失效,這里先介紹它未失效的兩個構造器:
- Date():生成一個代表當前日期時間的Date對象,該方法實際是調用System類的currentTimeMillis()方法獲取long型的整數作為日期參數。
- Date(long Date):根據指定的long型整數來生成一個Date對象。創建的對象是從1970年01月01日00時(格林威治時間)開始以毫秒計算時間,計算 millisec 毫秒。
由於Date類的大部分成員方法也失效了,這里介紹一些還未失效的方法:
- boolean after(Date when):測試該日期是否在指定日期when之后。
- boolean before(Date when):測試該日期是否在指定日期when之前。
- int compareTo(Date anotherDate):比較兩個日期的大小,后面的時間大於前面的時間時返回-1,否則返回1。
- boolean equals(Object obj):比較兩個時間是否相同,當表示同一時刻時返回true。
- long getTime():返回該時間對應的long型整數,一個毫秒值。
- void setDate(long time):設置Date對象的時間。
1 Date date = new Date(); 2 System.out.println(date);//Mon Oct 30 15:09:54 CST 2017 3 System.out.println(date.getTime());//1509347462950 4 5 Date d1 = new Date(10000); 6 Date d2 = new Date(20000); 7 System.out.println(d1.before(d2));//true 8 System.out.println(d1.compareTo(d2));//-1 9 10 date.setTime(100000000); 11 System.out.println(date);//Fri Jan 02 11:46:40 CST 1970
Date對象的格式化可以采用SimpleDateFormat這個類的format(Date date)方法,具體代碼示例如下:
1 Date date = new Date(); 2 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 3 System.out.println(simpleDateFormat.format(date));//2017/10/30 15:15:48
-
Calendar類
因為Date類在設計上的一些缺陷,所以java提供了Calendar類來更好地處理日期和時間。Calendar是一個抽象類,所以不能創建一個Calendar類的實例對象,但是可以通過getInstance靜態方法獲得。這里介紹一些Calendar類常用的操作:
- getInstance():獲取Calendar的實例對象。
- get():獲取calendar對象的日期和時間信息。
- set():設置日期和時間。
- getTimeInMillis():獲取時間的毫秒級數據。
- 此外還介紹了一些日期時間格式化、計算時間差的方法。
1 //通過getInstance()方法獲得Calendar的實例對象 2 Calendar calendar = Calendar.getInstance(); 3 4 /* 5 * 通過calendar對象獲取日期和時間信息 6 * 注意:Calendar類中年份的數值直接書寫,月份的值為實際的月份值減1,日期的值就是實際的日期值。 7 */ 8 System.out.println(calendar.get(calendar.YEAR));//年 9 System.out.println(calendar.get(calendar.MONTH)+1);//月 10 System.out.println(calendar.get(calendar.DAY_OF_MONTH));//日 11 System.out.println(calendar.get(calendar.HOUR_OF_DAY));//時 12 System.out.println(calendar.get(calendar.MINUTE));//分 13 System.out.println(calendar.get(calendar.SECOND));//秒 14 15 //設置日期和時間 16 calendar.set(2017, 11, 10, 15, 30, 20); 17 18 /*利用SimpleDateFormat進行格式化 19 * 注意:此處format方法傳入的參數為一個Date對象,所以需要調用calendar對象的getTime方法以獲取一個Date對象 20 */ 21 System.out.println(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(calendar.getTime()));//2017/12/10 15:30:20 22 23 /* 24 *計算時間差: 25 * 通過調用calendar類的getTimeInMillis方法,計算毫秒級的時間差,再進行換算得到所需的時間差格式 26 */ 27 Calendar startCalendar = Calendar.getInstance(); 28 startCalendar.set(2017, 6, 1, 12, 30, 50);//起始時間為2017/7/1 12:30:50 29 Calendar endCalendar = Calendar.getInstance();//結束時間為當前時間 30 long deltaTime = endCalendar.getTimeInMillis() - startCalendar.getTimeInMillis() ; 31 //直接輸出毫秒級的時間差 32 System.out.println(deltaTime); 33 //換算成天數的時間差 34 System.out.println(deltaTime/(1000*3600*24));
下一節將介紹剩下的幾個常用類。