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是否为null
  13. 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的hashCode
  22. 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. // 翻转nums
  15. 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文档。

如有错误,敬请指出。

JDK中工具类的使用的更多相关文章

  1. JDK中String类的源码分析(二)

    1.startsWith(String prefix, int toffset)方法 包括startsWith(*),endsWith(*)方法,都是调用上述一个方法 public boolean s ...

  2. 观察者模式学习--使用jdk的工具类简单实现

    观察者模式学习之二:使用jdk的自带的工具类实现,与自己实现相比,两者有以下的区别: 1,自己实现,需要定义观察者的接口类和目标对象的接口类.使用java util的工具类,则不需要自己定义观察者和目 ...

  3. JDK并发工具类

    在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程 ...

  4. JDK中Unsafe类详解

    Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...

  5. JDK中Integer类的进制转换实现

    JDK中关于Integer类的进制转换方法很精巧,具体实现如下: final static char[] digits = { '0' , '1' , '2' , '3' , '4' , '5' , ...

  6. JDK中String类的源码分析(一)

    1.String类是final的,不允许被继承 /** The value is used for character storage. */ private final char value[]; ...

  7. 利用jdk中工具完成Java程序监控方法记录

    转载加自己整理的部分内容,转载自:http://jiajun.iteye.com/blog/810150 记录下JConsole使用方法 一.JConsole是什么    从Java 5开始 引入了 ...

  8. JDK中哪些类是不能继承的?

    不能继承的是类是那些用final关键字修饰的类. 实际上即使我们自己开发的类,也可以通过使用final修饰来阻止被继承.通过使用final修饰一个类,可以阻止该类被继承,这样该类就被完全地封闭起来了, ...

  9. 使用JDK中的类URL访问HDFS(来自吴超Hadoop)

    package hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStre ...

随机推荐

  1. Windbg命令

    (1)!runaway命令显示每个线程消费的时间 参考:http://blog.csdn.net/hgy413/article/details/7564252 (2)!wow64exts.sw 关闭6 ...

  2. velocity模板技术生成word文档

    本文介绍採用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容例如以下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项 ...

  3. Python小工具--删除svn文件

    有的时候我们需要删除项目下的svn相关文件,但是SVN会在所有的目录下都创建隐藏文件.svn,手工一个个目录查找然后删除显然比较麻烦.所以这里提供了一个Python小工具用于批量删除svn的相关文件: ...

  4. 个人对maven pom.xml文件的理解

    如:一个项目可能需要引用另外两个项目的类.. 如 项目cswebbefore  需要引用cswebservice 和reports 这三个项目都有各自的pom.xml文件 cswebservice 项 ...

  5. 取消掉Transfer-Encoding:chunked

    先说解决方法:::不让服务器返回Transfer-Encoding:chunked,在客户端请求的时候可以使用http 1.0的协议. 有时候,Web服务器生成HTTP Response是无法在Hea ...

  6. php实现网页标签补全方法(转)

    导读:PHP在生成静态文件的时候,有时候会因为一些混编问题让HTML标签不完整或混乱而导致页面混乱.作者分享下面这段小代码可以非常方便解决问题. 如果你的网页内容的html标签显示不全,有些表格标签不 ...

  7. UNIX标准化及实现之限制

    前言 UNIX系统实现定义了很多幻数和常量,其中有很多已被硬编码(关于硬编码和软编码:http://www.cnblogs.com/chenkai/archive/2009/04/10/1432903 ...

  8. LeetCode: Palindrome Partition

    LeetCode: Palindrome Partition Given a string s, partition s such that every substring of the partit ...

  9. [Security] Automatically adding CSRF tokens to ajax calls when using jQuery--转

    地址:http://erlend.oftedal.no/blog/?blogid=118 When building a ajax based application, you want to pro ...

  10. jq层次选择器

    二. 层次选择器 1. parent > child(直系子元素) $(document).ready(function () { // 选取div下的第一代span元素,将字体颜色设为红色 $ ...