1. 程式人生 > >JAVA常用類庫(一)

JAVA常用類庫(一)

Scanner

Scanner是一個基於正則表示式的文字掃描器,它可以從檔案,輸入流,字串中解析出基本型別數值和字串值。 Scanner使用時要匯入import java.util.Scanner; 如果要使用檔案,則要匯入import java.io.File; 下面舉兩個例子:
Scanner sc=new Scanner(System.in);
		while(sc.hasNextLong())
		{
			System.out.println(sc.nextLong());
		}
上面的程式碼效果就是可以持續的輸入long型資料,以空格間斷,摁下回車鍵後會將這些資料依次輸出。 如果sc.hasNextLong()改為sc.hasNext(),輸出部分改成sc.next()就是字串,也可以改成其它型別。 當輸入型別與要求不符時,這部分程式便執行完畢,程式會執行下一部分
Scanner sc=new Scanner(new File("C:\\abc.txt"));
		//sc.useDelimiter("\\|");
		while( sc.hasNextLine())
	{
		System.out.println(sc.nextLine());
	}
如果使用檔案,需要在主函式後面加上 throws Exception 另外,可以通過sc.useDelimiter()來設定分隔符,設定分隔符後,預設分隔符失效

System

System類代表了當前JAVA程式的執行平臺,程式不能建立System物件。不過可以通過System直接呼叫一些類變數和類方法。 首先,System.gc()可以建議系統進行垃圾回收,而runFinalization()方法可以讓系統啟動Finalization()方法 下面是獲取系統所有環境變數的程式碼(以下程式碼需要匯入java.util.Map)
Map<String,String> env=System.getenv();
		for(String name:env.keySet())
		{
			System.out.println(name+"-------->"+env.get(name));
		}

另外就是獲取系統屬性的程式碼(需要匯入java,util.Properties)
Properties props=System.getProperties();
		for(Object name:props.keySet())
		{
			System.out.println(name+"-------->"+props.getProperty((String) name));
		}

System.currentTimeMillis()和System.nanoTime()都可以獲取時間,返回值為一個long型整數,都為與UTC1970年1月1日午夜的時間差,前者是以毫秒為單位,後者以納秒為單位。這兩個方法在很多系統上會出錯——因為有些系統是以幾十毫秒為單位計算時間的。 System類提供了一個identityHashCode(Object object)方法,這個方法會返回一個以地址計算得到了HashCode()值,由於hashCode()方法在某些類裡被重寫了,所以有時候並不靠譜,但identityHashCode(Object object)方法不同,如果其值一致,必為同一個物件,下面用程式碼舉例:
String str0="hello";
		String str1=new String("hello");
		String str2=new String("hello");
		String str3=str2;
		System.out.println("str0\t"+str0.hashCode()+"\t"+System.identityHashCode(str0));
		System.out.println("str1\t"+str1.hashCode()+"\t"+System.identityHashCode(str1));
		System.out.println("str2\t"+str2.hashCode()+"\t"+System.identityHashCode(str2));
		System.out.println("str3\t"+str3.hashCode()+"\t"+System.identityHashCode(str3));
以下是輸出結果
str0	99162322	1296263453
str1	99162322	78255756
str2	99162322	984499128
str3	99162322	984499128

Runtime

Runtime類代表java程式的執行時環境,每一個java程式都有一個與之對應的Runtime物件,應用程式不能建立Runtime例項,不過可以getRuntime()方法獲得與之對應的Runtime物件。 與System類似,Runtime也有gc()和runFinalization()方法。 此外還有load(String filename)方法和loadLibrary(String libname)方法用於載入檔案和動態連線庫。 下面是一個Runtime的使用例項
Runtime rt=Runtime.getRuntime();
		System.out.println("處理器數量"+rt.availableProcessors());
		System.out.println("空閒記憶體量"+rt.freeMemory());
		System.out.println("總記憶體數"+rt.totalMemory());
		System.out.println("最大記憶體數"+rt.maxMemory());
處理器數量4
空閒記憶體量126562888
總記憶體數127926272
最大記憶體數1890582528
此外,Runtime可以直接單獨啟動一個程序來執行系統操作命令 rt.exec("");引號之間放需要執行的命令

Object

Object是所有類、陣列、列舉類的父類,也就是說,JAVA允許任何類的物件賦值給Object型的引用。 這裡說一下toString()方法,該方法執行時返回“執行時類名@十六進位制hashCode值”格式的字串。 java提供了一個protected修飾的clone()方法用於實現物件的自我克隆,就是得到一個當前物件的副本,兩者之間完全隔離。 要想實現克隆,該類要繼承Cloneable介面(該接口裡沒有定義任何方法);隨後該類實現自己的Clone()方法,在實現過程中要呼叫父類的Clone()方法
class Address
{
	String detail;
	public Address(String str)
	{
		this.detail=str;
	}
}
class User implements Cloneable
{
	int age;
	Address address;
	public User(int age)
	{
		this.age=age;
		this.address=new Address("江蘇南京");
	}
	public User clone() throws CloneNotSupportedException
	{
		return (User)super.clone();
	}
}
public class Test
{
public static void main(String []args) throws CloneNotSupportedException
	{User u1=new User(23);
		User u2=u1.clone();
		System.out.println(u1==u2);
		System.out.println(u1.address==u2.address);
}
}
結果是 false
true
也就是說,克隆的物件不是原來的物件,儘管數值完全一樣。 此外,clone()方法只是淺克隆,它只克隆該物件所有成員變數值,不會對引用型別的成員變數值所引用的物件進行克隆,也就是引用型別變數克隆後指向的物件和之前的是同一個。

Objects

JAVA7新增了Objects工具類,該類主要是保證“空指標“安全問題的(當然了,JAVA沒有指標,但是大致是這麼個意思) 如一個引用變數為null時,直接呼叫其toString()方法會引起NullPointerException,而使用Objects類的toString(Object object)就不會,若object為null時,會直接輸出“null”字串。 JAVA為工具類命名的習慣就是加一個字母s

String,StringBuilder,StringBuffer

String是不可變類,一旦建立,不可改變,直到銷燬。 StringBuffer這是提供一個字元序列可變的字串,可以通過append(),insert().reverse(),setCharAt(),setLength()方法來改變,一旦生成最終格式,可以呼叫toString()方法將其轉換為字串。 StringBuilder是JDK1.5新增的,與StringBuffer的區別在於沒有考慮程序安全,所以效率略高,相同情況下優先使用StringBuilder String類有contentEquals(StringBuffer bf)方法,用於對比內容,相同返回true 這三個類的方法是在太多了,實用的也很多,自己去看文件吧

Math

海量的方法,多到了沒法列舉了,基本上包含了數學所有的運算,還是自己看文件吧

BigDecimal

簡單的說,java中的double物件會發生精度丟失(就是小數點後N位可能出現亂七八糟的數字),而BigDecimal類可以解決這個問題。 首先建議使用String為引數的構造器,如果必須使用double型引數,則使用BigDemical.valueOf(double value)方法,不要將double型數直接傳進去
BigDecimal bd=BigDecimal.valueOf(0.05);
		BigDecimal bs=new  BigDecimal("0.01");
		BigDecimal bb=new BigDecimal(0.01);
		System.out.println(bd.add(bs));
		System.out.println(bd.add(bb));

結果是 0.06
0.06000000000000000020816681711721685132943093776702880859375