JDK中工具类的使用

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: 小 | 中 | 大 | 超大  

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使用示例:

1staticvoiduSEObjects() {2String str1 =null;3String str2 = "Hellojava";45//判断str1与str2是否相等6booleanequalFlag =Objects.equals(str1, str2);78//进行空指针判断,如果为null就会抛出空指针异常,否则返回原值9str1 =Objects.requireNonNull(str1);10str2 = Objects.requireNonNull(str2, "Str2 is null");1112//判断str1是否为null13booleannullFlag =Objects.isNull(str1);14//判断str2是否为非空15booleannonNullFlag =Objects.nonNull(str2);16}

View Code

(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使用示例代码如下:

1staticvoiduseArrays() {2int[] arr1 = {5, 3, 2, 1, 4};3int[] arr2 = {5, 3, 2, 1, 4, 5};45//对arr1进行排序,默认是升序排序6Arrays.sort(arr1);78//搜索2在arr1中的位置,返回索引值,arr1必须是有序的9intindex = Arrays.binarySearch(arr1, 2);1011//判断arr1与arr2是否相等12booleanequalFlag =Arrays.equals(arr1, arr2);1314int[] newArr =newint[10];15//使用10填充newArr数组16Arrays.fill(newArr, 10);1718//复制newArr的数组0--4的元素,并返回新数组19int[] ansArr = Arrays.copyOf(newArr, 5);2021//获得ansArr的hashCode22intansHashCode =Arrays.hashCode(ansArr);2324//将ansArr转化为一个字符串25String str =Arrays.toString(ansArr);26}

View Code

(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的使用示例代码如下:

1staticvoiduseCollections() {2List<Integer> nums =newArrayList<>();3nums.add(1);4nums.add(3);5nums.add(2);6nums.add(5);7nums.add(4);8//对List中的元素进行排序9Collections.sort(nums);1011//寻找5在nums中的索引值12intindex = Collections.binarySearch(nums, 5);1314//翻转nums15Collections.reverse(nums);16//寻找出nums中的最小值17Collections.min(nums);18//寻找出nums中的最大值19Collections.max(nums);20}

View Code

(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使用示例代码如下:

1staticvoiduseFiles()throwsIOException {2Path dataPath = Paths.get("data.txt");3//获取字符输入流4InputStream is =Files.newInputStream(dataPath);5//获取字符输出流6OutputStream os =Files.newOutputStream(dataPath);7//获取字符输入流8BufferedReader reader =Files.newBufferedReader(dataPath);9//获取字符输出流10BufferedWriter writer =Files.newBufferedWriter(dataPath);11//获取文件中的所有内容,并以字符串流返回,每个字符串代表文件的一行文本12Stream<String> lines = Files.lines(dataPath, Charset.forName("UTF-8"));1314//创建一个文件路径15Files.createDirectories(Paths.get("hello"));16//创建一个文件17Files.createFile(Paths.get("config.txt"));1819//删除文件或文件夹,如果不存在,则会抛出异常20Files.delete(Paths.get("data.txt"));21//删除文件或文件夹,如果不存在则不会执行删除操作,也不会抛出异常22Files.deleteIfExists(Paths.get("hello"));2324//只能进行文件复制,不能进行文件夹复制25Files.copy(Paths.get("1.txt"), Paths.get("2.txt"));2627//文件或文件夹移动28Files.move(Paths.get("SRC"), Paths.get("DES"));29}

View Code

(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使用示例代码如下:

1staticvoiduseSystem() {2//获取当前时间,单位是毫秒3longtime =System.currentTimeMillis();45//将数组1复制到数组26int[] arr1 = {1, 2, 3, 4, 5};7int[] arr2 =newint[5];8System.arraycopy(arr1, 0, arr2, 0, arr1.length);910//正常退出程序11System.exit(0);12}

View Code

本文章只是粗略的介绍了各工具类的用法,更详细的用法请观看相应的API文档。

如有错误,敬请指出。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有