zoukankan      html  css  js  c++  java
  • 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使用示例:

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

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

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

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

     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     }
    View Code

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

    如有错误,敬请指出。

  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/wss-is-knight/p/4823382.html
Copyright © 2011-2022 走看看