JDK中內置了很多常用的工具類,且多以“s”結尾,如:集合工具類Collections,數組工具類Arrays,對象工具類Objects,文件工具類Files,路徑工具類Paths,數學工具類Maths;但也有一些不是以“s”結尾的工具類,如TimeUnit和System。
下面就簡單介紹各工具類的用法。
(1)Objects中定義很多有用的API,如空指針判斷,對象相等比較等。比較常用的API有以下幾個:
? 用于判斷兩個對象是否相等,兩個參數都可以為null
? public static boolean equals(Object a, Object b)
用于判斷一個對象是否為空
? public static boolean isNull(Object obj)
用于判斷一個對象是否不為空
public static boolean nonNull(Object obj)
用于對變量進行非空校驗,如果為空則拋出空指針異常,不為空則返回此變量,還可以拋出指 定異常信息
public static <T> T requireNonNull(T obj)
public static <T> T requireNonNull(T obj, String message)
? Objects使用示例:
1 static void uSEObjects() { 2 String str1 = null; 3 String str2 = "Hello java"; 4 5 // 判斷str1與str2是否相等 6 boolean equalFlag = Objects.equals(str1, str2); 7 8 // 進行空指針判斷,如果為null就會拋出空指針異常,否則返回原值 9 str1 = Objects.requireNonNull(str1);10 str2 = Objects.requireNonNull(str2, "Str2 is null");11 12 // 判斷str1是否為null13 boolean nullFlag = Objects.isNull(str1);14 // 判斷str2是否為非空15 boolean nonNullFlag = Objects.nonNull(str2);16 }
(2)Arrays中定義了很多與數組相關API,常用的主要有一下幾個API
// 數組排序
public static void sort(int[] a)
// 二分法查找數組中的元素
public static int binarySearch(long[] a, long key)
// 判斷兩個數組是否相等(數組元素對應相等,且數組長度一致)
public static boolean equals(long[] a, long[] a2)
// 使用指定值填充數組
public static void fill(long[] a, long val)
// 復制數組
public static <T> T[] copyOf(T[] original, int newLength)
// 獲取數組的hashCode
public static int hashCode(long a[])
// 將整個數組轉化為形如:[a, b, c, ..., d]的格式的字符串
public static String toString(int[] a)
Arrays使用示例代碼如下:
1 static void useArrays() { 2 int[] arr1 = {5, 3, 2, 1, 4}; 3 int[] arr2 = {5, 3, 2, 1, 4, 5}; 4 5 // 對arr1進行排序,默認是升序排序 6 Arrays.sort(arr1); 7 8 // 搜索2在arr1中的位置,返回索引值,arr1必須是有序的 9 int index = Arrays.binarySearch(arr1, 2);10 11 // 判斷arr1與arr2是否相等12 boolean equalFlag = Arrays.equals(arr1, arr2);13 14 int[] newArr = new int[10];15 // 使用10填充newArr數組16 Arrays.fill(newArr, 10);17 18 // 復制newArr的數組0--4的元素,并返回新數組19 int[] ansArr = Arrays.copyOf(newArr, 5);20 21 // 獲得ansArr的hashCode22 int ansHashCode = Arrays.hashCode(ansArr);23 24 // 將ansArr轉化為一個字符串25 String str = Arrays.toString(ansArr);26 }
(3)Collections中定義了許多集合常用的API,常用的API如下:
// 對List進行排序
public static <T extends Comparable<? super T>> void sort(List<T> list)
// 二分法查找List中的元素索引值,List必須有序
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
// 翻轉List
public static void reverse(List<?> list)
// 尋找出List中的最小元素值
public static <T extends Object & Comparable<? super T>>
T min(Collection<? extends T> coll)
// 尋找出List中的最大元素值
public static <T extends Object & Comparable<? super T>>
T max(Collection<? extends T> coll)
Collections的使用示例代碼如下:
1 static void useCollections() { 2 List<Integer> nums = new ArrayList<>(); 3 nums.add(1); 4 nums.add(3); 5 nums.add(2); 6 nums.add(5); 7 nums.add(4); 8 // 對List中的元素進行排序 9 Collections.sort(nums);10 11 // 尋找5在nums中的索引值12 int index = Collections.binarySearch(nums, 5);13 14 // 翻轉nums15 Collections.reverse(nums);16 // 尋找出nums中的最小值17 Collections.min(nums);18 // 尋找出nums中的最大值19 Collections.max(nums);20 }
(4)Files中定義了許多常用的與文件相關的API,常用API如下:
// 獲取指定文件的字節輸入流
public static InputStream newInputStream(Path path, OpenOption... options)
// 獲取指定文件的字節輸出流
public static OutputStream newOutputStream(Path path, OpenOption... options)
// 以指定編碼獲取指定文件的字符輸入流
public static BufferedReader newBufferedReader(Path path, Charset cs)
// 以指定編碼獲取指定文件的字符輸出流
public static BufferedWriter
newBufferedWriter(Path path, Charset cs, OpenOption... options)
// 以指定編碼獲取一個文件中的所有內容,并以字符串流返回
public static Stream<String> lines(Path path, Charset cs)
// 創建文件
public static Path createFile(Path path, FileAttribute<?>... attrs)
// 創建路徑
public static Path createDirectory(Path dir, FileAttribute<?>... attrs)
// 刪除文件
public static void delete(Path path)
// 如果文件存在,則刪除文件
public static boolean deleteIfExists(Path path
// 文件復制
public static Path copy(Path source, Path target, CopyOption... options)
// 文件移動
public static Path move(Path source, Path target, CopyOption... options)
Files使用示例代碼如下:
1 static void useFiles() throws IOException { 2 Path dataPath = Paths.get("data.txt"); 3 // 獲取字符輸入流 4 InputStream is = Files.newInputStream(dataPath); 5 // 獲取字符輸出流 6 OutputStream os = Files.newOutputStream(dataPath); 7 // 獲取字符輸入流 8 BufferedReader reader = Files.newBufferedReader(dataPath); 9 // 獲取字符輸出流10 BufferedWriter writer = Files.newBufferedWriter(dataPath);11 // 獲取文件中的所有內容,并以字符串流返回,每個字符串代表文件的一行文本12 Stream<String> lines = Files.lines(dataPath, Charset.forName("UTF-8"));13 14 // 創建一個文件路徑15 Files.createDirectories(Paths.get("hello"));16 // 創建一個文件17 Files.createFile(Paths.get("config.txt"));18 19 // 刪除文件或文件夾,如果不存在,則會拋出異常20 Files.delete(Paths.get("data.txt"));21 // 刪除文件或文件夾,如果不存在則不會執行刪除操作,也不會拋出異常22 Files.deleteIfExists(Paths.get("hello"));23 24 // 只能進行文件復制,不能進行文件夾復制25 Files.copy(Paths.get("1.txt"), Paths.get("2.txt"));26 27 // 文件或文件夾移動28 Files.move(Paths.get("SRC"), Paths.get("DES"));29 }
(5)Paths主要和Files,File搭配使用,沒有什么需要講的。
(6)Maths主要封裝了一些常用的與數學相關的操作,這是大家最為熟悉的工具類,也不需要講解。
(7)TimeUnit主要是線程sleep的時候比較方便:
// 線程休眠5小時
TimeUnit.HOURS.sleep(5);
// 線程休眠5分鐘
TimeUnit.MINUTES.sleep(5);
// 線程休眠5秒
TimeUnit.SECONDS.sleep(5);
(8)System也是大家比較熟悉的一個工具類,比如大家最常用的控制臺輸出就是用的
System.out.PRintln(),常用的API有:
// 獲取當前時間,值是以毫秒為單位
public static native long currentTimeMillis()
// 結束Java程序運行
public static void exit(int status)
// 數組復制
public static native
void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
System使用示例代碼如下:
1 static void useSystem() { 2 // 獲取當前時間,單位是毫秒 3 long time = System.currentTimeMillis(); 4 5 // 將數組1復制到數組2 6 int[] arr1 = {1, 2, 3, 4, 5}; 7 int[] arr2 = new int[5]; 8 System.arraycopy(arr1, 0, arr2, 0, arr1.length); 9 10 // 正常退出程序11 System.exit(0);12 }
本文章只是粗略的介紹了各工具類的用法,更詳細的用法請觀看相應的API文檔。
如有錯誤,敬請指出。
新聞熱點
疑難解答