System,Runtime,Math
在Java中,System
、Runtime
和 Math
是三個非常常用且重要的類,它們分別屬於不同的包(java.lang
),提供了不同的功能。下面是對這三個類的簡要介紹:
1. System 類
System
類位於 java.lang
包中,因此它是自動匯入的,不需要顯式地匯入。這個類提供了一些有用的類欄位和靜態方法,用於訪問與Java執行時環境相關的系統屬性和資源。
-
常用方法
:
System.out.println(String x)
:向標準輸出裝置(通常是控制檯)列印一個字串,並換行。System.exit(int status)
:終止當前執行的Java虛擬機器。引數是一個狀態碼,0
通常表示正常退出。System.currentTimeMillis()
:返回自1970年1月1日00:00:00 GMT以來的毫秒數。System.getProperty(String key)
:獲取系統屬性的值。
2. Runtime 類
Runtime
類也是位於 java.lang
包中,它代表了Java程式執行時的環境。每個Java應用程式都有一個 Runtime
例項,該例項允許應用程式與Java執行時的環境介面。
-
常用方法
:
Runtime.getRuntime()
:返回當前Java應用程式的Runtime
物件。Runtime.exec(String command)
:執行指定的字串命令。Runtime.freeMemory()
:返回Java虛擬機器中的空閒記憶體量。Runtime.totalMemory()
:返回Java虛擬機器試圖使用的總記憶體量。Runtime.maxMemory()
:返回Java虛擬機器試圖使用的最大記憶體量。
3. Math 類
Math
類同樣位於 java.lang
包中,它包含用於執行基本數學運算的方法,如指數、對數、平方根和三角函式。
-
常用方法
:
Math.abs(int a)
:返回整數的絕對值。Math.ceil(double a)
:返回大於或等於引數的最小雙精度浮點數,等於一個整數。Math.floor(double a)
:返回小於或等於引數的最大雙精度浮點數,等於一個整數。Math.max(int a, int b)
:返回兩個整數中的最大值。Math.min(int a, int b)
:返回兩個整數中的最小值。Math.pow(double a, double b)
:返回第一個引數的第二個引數次冪的值。Math.random()
:生成一個大於等於0.0且小於1.0的隨機雙精度浮點數。Math.round(double a)
:返回最接近引數的long
。Math.sqrt(double a)
:返回正確舍入的double
值的正平方根。
這些類在Java開發中非常有用,涵蓋了系統操作、執行時環境管理和數學計算等多個方面。
4.StringBuffer和StringBuilder類
StringBuffer
和 StringBuilder
是 Java 中用於構建可變字串的類。它們允許我們在建立後修改字串的內容,這與 Java 中的 String
類不同,後者是不可變的。當需要頻繁修改字串時,使用 StringBuffer
或 StringBuilder
比使用字串連線(如使用 +
運算子)更高效,因為後者在每次連線時都會建立一個新的字串物件。
主要區別
- 執行緒安全性:
StringBuffer
是執行緒安全的,這意味著它的所有公開方法都是同步的。這意呀著在多執行緒環境中,當一個執行緒訪問StringBuffer
物件時,其他執行緒不能訪問它,直到該執行緒完成操作。相比之下,StringBuilder
不是執行緒安全的,因此它在單執行緒環境中效能更好。 - 效能:由於
StringBuilder
沒有同步開銷,因此它通常比StringBuffer
快。但是,在需要執行緒安全性的情況下,應使用StringBuffer
。
使用場景
- 如果你在多執行緒環境中工作,並且需要構建可變字串,那麼應該使用
StringBuffer
。 - 如果你在單執行緒環境中工作,並且需要構建可變字串,那麼使用
StringBuilder
將是更好的選擇,因為它提供了更好的效能。
示例
下面是一個使用 StringBuilder
的簡單示例:
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello, ");
sb.append("world!");
System.out.println(sb.toString()); // 輸出: Hello, world!
}
}
在這個示例中,我們建立了一個 StringBuilder
物件,並使用 append
方法向其新增文字。最後,我們使用 toString
方法將其轉換為一個普通的 String
物件,並將其列印出來。
注意事項
- 雖然
StringBuffer
和StringBuilder
提供了修改字串的便利,但它們也會消耗更多的記憶體,因為它們在修改時會建立新的字元陣列(如果需要的話)。然而,與建立大量String
物件相比,這種記憶體使用通常是可接受的。 - 在某些情況下,如果你知道字串的最終長度,可以在建立
StringBuilder
或StringBuffer
時指定一個初始容量,以減少重新分配內部字元陣列的需要。但是,如果指定的容量太小,並且後續新增了更多的內容,則仍然可能需要重新分配陣列。因此,通常建議讓StringBuilder
或StringBuffer
自動管理其容量。