1. 程式人生 > >Java 其他常用工具及其他基礎複習

Java 其他常用工具及其他基礎複習

以下內容為簡記複習,留個印象利於回顧。

每個標題後的內容為其方法及其簡單使用方式簡記。

System 靜態方法
gc(); exit(int status); currentTimeMillis(); arrayCopy(Obj src, int srcPos, Obj dest, int destPos, int length);

BigInteger
可以運算超過 integer 範圍的資料
public BigInteger(int val); add(BigInteger val); substract(); multiply(); divide();
divideAndRemainder(BigInteger val); 返回 this / val, this % val;

BigDecimal
運算時,float,double 容易損失精度,為精確表示並計算浮點數
開發推薦構造時傳入字串 new BigDecimal(“2.0”); 或是 BigDecimal.valueOf(2.0);

Date
new Date(); new Date(long time); setTime(); getTime();

DateFormat, SimpleDateFormat
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年mm月dd日 HH:mm:ss”);
使用 parse 方法以相反的方式將字串轉換成 Date 物件;

Calendar
Calendar c = Calendar.getInstance();
System.out.println(c.getInstance(Calendar.YEAR));
c.add(Calendar.MONTH, -1); set(…, …);

Map
迭代 map.keySet(); 或使用 Set<Map.Entry<String, String>> entrySet = map.entrySet();
之後可使用 iterator 或增強 for 迴圈遍歷 entrySet;
LinkedHashMap 保持 HashMap 元素放入順序;
TreeMap

底層為二叉樹演算法實現
實現排序:key 值物件型別需要實現 Comparable 介面(重寫 compareTo 方法);初次之外 也可在 TreeMap 構造是傳入 Comparator
物件;以上為 TreeSet 實現排序的兩種方式;

HashMapHashTable 的區別
底層都是 Hash 演算法,都是雙列集合;執行緒安全與不安全區別,效率區別;HashMap 可存 Null 鍵和 Null 值;

Collections 工具類
Collections.sort(list); binarySearch(list, key); max(list); void reverse(list); void shuffle(list);

集合框架
<? super E>, <? extends E> 分別指定下邊界和上邊界;
Comparator<Student> 實現後可提供該 Student 及其子類使用;

異常 Exception
執行時異常和編譯時異常(編譯時必須進行處理)
Throwable
Error
Exception
RuntimeException (此類採用 try-catch 進行處理)

finally 關鍵字
一定會被執行(除 System.exit() 退出的情況);使用者釋放資源;

final,finally,finalize
final: 修飾類,類不能被繼承;修飾方法,方法不能重寫;修飾變數,變數不能被重新賦值;
finally:與 try 聯合使用,用於進行釋放資源等操作
finallize:由物件的垃圾回收器呼叫此方法;
對於 return 和 finally 的問題:先 return 後再檢視 finally 語句是否存在,存在即執行(finally 在 return 後返回);注意 finally 中不
要寫return 語句,因為 finally 作用是釋放資源,寫返回語句那麼 try 和 catch 的 return 將被覆蓋;

File
File(String pathName); File(String parent, String child); File(File parent, String child);
createNewFile(); mkdir(); mkdirs(); renameTo(File dest); delete(); 刪除資料夾,該資料夾只能為空;
isFile(); isDirectory(); exists(); canRead(); canWrite(); isHidden();
file.getName(); file.length(); getAbsolutePath(); lastModified(); list(); File[] listFiles();

FilenameFilter
重寫 accept 方法後傳入 file 物件的 list 方法中,return true 則加入 list 方法最終返回結果中;

IO 流

位元組流

InputStream, OutputStream;
FileInputStream fis = new FileInputStream(“a.txt”);
int length = 0;
while((length = fis.read()) != -1) { fos.write(length); } // read 一次讀取一個位元組
fis.close();
使用 int 作為 read 返回值是為了防止錯誤返回,11111111 為 -1 的補碼;
fos.write() 逐個位元組寫入,會進行截位或補位;續寫則傳入第二個引數;

開發中使用方式:
byte[] arr = new byte[l024];
while…length = read(arr) != -1… fos.write(arr, 0, length);

可使用 BufferedInputStream 對 InputStream 物件進行包裝;減少了與硬碟的資料交換次數,運用記憶體的運算效率;
BIS 一次讀入 8192 個位元組資料進入緩衝區,一次返回個程式一個位元組(記憶體中),當緩衝區資料讀取完畢後在從硬碟重新讀取;
BOS 對應就是先寫到緩衝區,寫滿後再寫入硬碟。

位元組流不利於寫入中文等。

實現 AutoClosable 則會在 try-with-resource 中自動呼叫 close 方法

加密操作:
寫入是: fos.write(length ^ 123); 解密依據異或兩次等於本身的原則;
字元流
程式需要寫入或讀入一段文字是使用;不可以讀寫非純文字檔案;
Reader, Writer;
int c; while((c = fr.read()) != -1) { sout…};
也可以通過類似的字元陣列讀入;
同時也存在對應的 BufferedReader, BufferedWriter; readLine()(以 \r or \n 為結束標誌), write(line), newLine();
newLine() 跨平臺輸出換行符;

LineNumberReader
String line;
while((line = lnr.readLine()) != null) {}; lnr.getLineNumber();

指定碼錶讀寫資料
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(“utf-8.txt”), “utf-8”));

序列流
SequenceInputStream
結合多個流,一次連續完成對多個流的讀取;
結合2個以上的時,現將多個流加入集合中,後將由該集合生成的 Enumeration 物件(結合呼叫 elements 方法)傳入
SequenceInputStream 的構造方法中;

記憶體輸出流
ByteArrayOutputStream
寫入後可以一次性獲取所有資料

隨機訪問流
RandomAccessFile(File file, String mode);…
seek(): 改變寫入讀入指標的位置(追加);
用於多執行緒下載;

物件操作流
ObjectOutputStream 序列化與反序列化物件 物件型別必須實現 Serializable 介面
ObjectInputStream ois.readObject();

資料輸入輸出流
DataInputStream DataOutputStream
readInt(); writeInt();

列印流
位元組流 PinrtStream ps = System.out, 字元流 PrintWriter

標準輸入輸出流
InputStream in = System.in; PrintStream out = System.out;
修改:
System.setIn(new FileInputStream(…)); System.setOut(new FileOutputStream(…));

Properties
HashTable 子類(儲存內容無序), prop.setProperty(,),getProperty();
Enumeration en = (Enumeration) prop.getPropertyNames(); 實現遍歷
配合配置檔案使用
load(), store()
Properties prop = new …; prop.load(new FileInputStream(…));
修改後呼叫 store 方法
prop.store(new FileOutputStream(), “comments”);

裝飾設計模式
原來功能不足,進行補足;
獲取被裝飾類應用 -> 構造方法例項化物件 -> 對物件功能升級

多執行緒
實現方法
繼承 Thread 類,重寫 run 方法;例項化程序類後呼叫 start 方法開啟執行緒;可直接使用 Thread 中的方法;
可使用匿名內部類實現;
實現 Runnable 介面重寫 run 方法;之後將例項化物件傳入 Thread 建構函式中。

getName(); setName(); Thread.currentThread(); sleep();

setDaemon(); 傳入 true 設定守護執行緒(不會單獨執行,其他執行緒結束後自動退出);

join();
當前執行緒等待呼叫 join 方法的執行緒執行完畢後在執行;可以在 join 中指定時間;

Thread.yield()
當前執行執行緒禮讓;

setPriority(); 數值越大優先順序越高;可用 Thread.MAX_PRIORITY, Thread.MIN_PRIORITY 等指定;

synchronized 同步程式碼塊
鎖物件可以是任意的
synchronized() {}; 使用同一個鎖物件的同步程式碼塊在執行過程中不能暫停去執行其他同步程式碼塊;
非靜態的同步方法的鎖物件為 this;靜態同步方法的鎖物件則為該類的位元組碼物件;