JDK中工具类的使用
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文档。
如有错误,敬请指出。
JDK中工具类的使用的更多相关文章
- JDK中String类的源码分析(二)
1.startsWith(String prefix, int toffset)方法 包括startsWith(*),endsWith(*)方法,都是调用上述一个方法 public boolean s ...
- 观察者模式学习--使用jdk的工具类简单实现
观察者模式学习之二:使用jdk的自带的工具类实现,与自己实现相比,两者有以下的区别: 1,自己实现,需要定义观察者的接口类和目标对象的接口类.使用java util的工具类,则不需要自己定义观察者和目 ...
- JDK并发工具类
在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程 ...
- JDK中Unsafe类详解
Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...
- JDK中Integer类的进制转换实现
JDK中关于Integer类的进制转换方法很精巧,具体实现如下: final static char[] digits = { '0' , '1' , '2' , '3' , '4' , '5' , ...
- JDK中String类的源码分析(一)
1.String类是final的,不允许被继承 /** The value is used for character storage. */ private final char value[]; ...
- 利用jdk中工具完成Java程序监控方法记录
转载加自己整理的部分内容,转载自:http://jiajun.iteye.com/blog/810150 记录下JConsole使用方法 一.JConsole是什么 从Java 5开始 引入了 ...
- JDK中哪些类是不能继承的?
不能继承的是类是那些用final关键字修饰的类. 实际上即使我们自己开发的类,也可以通过使用final修饰来阻止被继承.通过使用final修饰一个类,可以阻止该类被继承,这样该类就被完全地封闭起来了, ...
- 使用JDK中的类URL访问HDFS(来自吴超Hadoop)
package hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStre ...
随机推荐
- jsp forward 动作标签
forward 动作标签: <jsp:forward page="要转向的页面"> </jsp:forward> 或 <jsp:forward pag ...
- Asp.Net MVC 3【Filters(过滤器)】
这里分享MVC里的Filters(过滤器),什么是MVC里的过滤器,他的作用是什么? 过滤器的请求处理管道中注入额外的逻辑.他们提供了一个简单而优雅的方式来实现横切关注点.这个术语是指所有对应用程序的 ...
- mybatis0209 二级缓存
.1二级缓存 1.1.1原理 mybatis和spring整合后一级缓存就没有了,sqlSession在不关闭的前提下2次查询就会从缓存中取,一级缓存缓存在sqlSession对象里面,当多用户查询的 ...
- 详细的OS X Yosemite 10.10懒人版安装教程
永远记住一句话:难,是因为不会.先是要放宽心态,才更利于解决安装过程中这样那样的问题.多尝试多动脑,不要有过份的依赖.很多问题到解决以后,才发现是如此的简单,我装黑苹果是拿来使用的,所以我的目的是装好 ...
- centos安装memcache与telnet
####################linux下安装memcache过程######################http://www.cnblogs.com/zgx/archive/2011/ ...
- Java SE ---算术运算符
算术运算符:(加)+,(减)-,(乘)*,(除)/,(求余)%,自增自减 一,算数运算符:当有若干个变量参与运算时,结果类型取决于这些变量中表示范围最大的那个变量类型.如果参加运算的变量中有整型int ...
- [XBee] ZigBee学习笔记
转自:http://blog.csdn.net/wanghanjiett/article/details/6931867 几个重要概念: node(节点): 在zigbee堆栈中最多有三种节点:Coo ...
- mysql颠覆实战笔记(八)--mysql的自定义异常处理怎么破
这一节课,沈老师带我们了解事务的异常 什么是异常? 我们先插入一组数据: ,10.5); 这个是正常的.但是我们把插入的user_money的值故意弄错:如下 ,‘abc’); 那么我们会得到一个ER ...
- mysqldump 失败
背景交代 mysql版本:mysql Ver 14.14 Distrib 5.7.11, for Linux (x86_64) using EditLine wrapper os:Linux vers ...
- javaweb学习总结十八(软件密码学、配置tomcat的https连接器以及tomcat管理平台)
一:软件密码学 1:对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效 ...