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 Listnums = 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 Streamlines = 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文档。
如有错误,敬请指出。