文档章节

JDK中的常用工具类

KnightOfWind
 KnightOfWind
发布于 2015/09/20 13:48
字数 1627
阅读 361
收藏 1

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

        static void useObjects() {
		String str1 = null;
		String str2 = "Hello Java";
		
		// 判断str1与str2是否相等
		boolean equalFlag = Objects.equals(str1, str2);
		
		// 进行空指针判断,如果为null就会抛出空指针异常,否则返回原值
		str1 = Objects.requireNonNull(str1);
		str2 = Objects.requireNonNull(str2, "Str2 is null");
		
		// 判断str1是否为null
		boolean nullFlag = Objects.isNull(str1);
		// 判断str2是否为非空
		boolean nonNullFlag = Objects.nonNull(str2);
	} 

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

        static void useArrays() {
		int[] arr1 = {5, 3, 2, 1, 4};
		int[] arr2 = {5, 3, 2, 1, 4, 5};
		
		// 对arr1进行排序,默认是升序排序
		Arrays.sort(arr1);
		
		// 搜索2在arr1中的位置,返回索引值,arr1必须是有序的
		int index = Arrays.binarySearch(arr1, 2);
		
		// 判断arr1与arr2是否相等
		boolean equalFlag = Arrays.equals(arr1, arr2);
		
		int[] newArr = new int[10];
		// 使用10填充newArr数组
		Arrays.fill(newArr, 10);
		
		// 复制newArr的数组0--4的元素,并返回新数组
		int[] ansArr = Arrays.copyOf(newArr, 5);
		
		// 获得ansArr的hashCode
		int ansHashCode = Arrays.hashCode(ansArr);
		
		// 将ansArr转化为一个字符串
		String str = Arrays.toString(ansArr);
	} 

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

        static void useCollections() {
		List<Integer> nums = new ArrayList<>();
		nums.add(1);
		nums.add(3);
		nums.add(2);
		nums.add(5);
		nums.add(4);
		// 对List中的元素进行排序
		Collections.sort(nums);
		
		// 寻找5在nums中的索引值
		int index = Collections.binarySearch(nums, 5);
		
		// 翻转nums
		Collections.reverse(nums);
		// 寻找出nums中的最小值
		Collections.min(nums);
		// 寻找出nums中的最大值
		Collections.max(nums);
	} 

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

         static void useFiles() throws IOException {
		Path dataPath = Paths.get("data.txt");
		// 获取字符输入流
		InputStream is = Files.newInputStream(dataPath);
		// 获取字符输出流
		OutputStream os = Files.newOutputStream(dataPath);
		// 获取字符输入流
		BufferedReader reader = Files.newBufferedReader(dataPath);
		// 获取字符输出流
		BufferedWriter writer = Files.newBufferedWriter(dataPath);
		// 获取文件中的所有内容,并以字符串流返回,每个字符串代表文件的一行文本
		Stream<String> lines = Files.lines(dataPath, Charset.forName("UTF-8"));
		
		// 创建一个文件路径
		Files.createDirectories(Paths.get("hello"));
		// 创建一个文件
		Files.createFile(Paths.get("config.txt"));
		
		// 删除文件或文件夹,如果不存在,则会抛出异常
		Files.delete(Paths.get("data.txt"));
		// 删除文件或文件夹,如果不存在则不会执行删除操作,也不会抛出异常
		Files.deleteIfExists(Paths.get("hello"));
		
		// 只能进行文件复制,不能进行文件夹复制
		Files.copy(Paths.get("1.txt"), Paths.get("2.txt"));
		
		// 文件或文件夹移动
		Files.move(Paths.get("SRC"), Paths.get("DES"));
	} 

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

    示例代码

        static void useSystem() {
		// 获取当前时间,单位是毫秒
		long time = System.currentTimeMillis();
		
		// 将数组1复制到数组2
		int[] arr1 = {1, 2, 3, 4, 5};
		int[] arr2 = new int[5];
		System.arraycopy(arr1, 0, arr2, 0, arr1.length);
		
		// 正常退出程序
		System.exit(0);
	} 

本篇文章只是较为粗略的介绍了各工具类的使用,如果想要进行更详细的了解,请参考对应的API文档。

如有错误,敬请指出。


© 著作权归作者所有

KnightOfWind
粉丝 0
博文 2
码字总数 3539
作品 0
巫溪
程序员
私信 提问
Guava-使用向导

Guava中包含了Google的一些核心类库:比如集合,缓存,并发包,常用注解,字符串处理,I/O等等。这些工具类被谷歌的工程师们经常用到。 但是通过查阅文档不是一个有效的学习类库的方式。这儿,...

stefanzhlg
2015/09/29
215
0
JavaSE和JavaEE的起步学习路线

Java javaSE部分 1)能够掌握DOS系统常用基本命令; 2)熟练使用eclipse编写java代码; 3)掌握常用数据结构和算法; 4)掌握常用的编程设计模式; 5)熟练使用java语言的常用对象; 6)使用java编...

Jasonisoft
2016/05/18
0
0
Java开发必须掌握的线上问题排查命令

作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题。这里提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上问题的排查。由于在生产环境中...

bill_wu
2016/05/16
268
0
代码片段:基于 JDK 8 time包的时间工具类 TimeUtil

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官。” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK 8 time包的时间...

泥沙砖瓦浆木匠
2016/08/29
2.5K
7
Google Guava 笔记

一、引言 Guava 是 google 几个java核心类库的集合,包括集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common ...

qllinhongyu
2014/09/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
371
7
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
11
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部