• Java基础(四)——常用类


    一、比较器

    1、介绍

      在Java中经常会涉及到对象数组的排序问题,那么,就需要让对象具有可比性。
      Java实现对对象排序的方式有两种:
      自然排序:java.lang.Comparable
      定制排序:java.util.Comparator

    2、自然排序(Comparable)

      代码示例:将学生按身高排序

     1 public class Student implements Comparable<Student> {
     2     private String name;
     3     private int age;
     4     // 学生身高
     5     private int height;
     6 
     7     @Override
     8     public int compareTo(Student o) {
     9         // 默认升序. 需要降序的话, o.height - this.height 即可
    10         return this.height - o.height;
    11     }
    12     // 省略setter getter
    13 }
     1 // 测试类
     2 public class Main {
     3     public static void main(String[] args) {
     4         Student[] arr = new Student[5];
     5         arr[0] = new Student("小0", 10, 178);
     6         arr[1] = new Student("小1", 10, 181);
     7         arr[2] = new Student("小2", 10, 170);
     8         arr[3] = new Student("小3", 10, 190);
     9         arr[4] = new Student("小4", 10, 160);
    10         Arrays.sort(arr);
    11 
    12         System.out.println(Arrays.toString(arr));
    13     }
    14 }

      JDK源码中,Comparable 的典型实现,默认都是从小到大排列的。
      String:按照字符串中字符的Unicode值进行比较。
      Character:按照字符的Unicode值来进行比较。
      数值类型对应的包装类以及BigInteger、BigDecimal:按照它们对应的数值大小进行比较。
      Boolean:true 对应的包装类实例大于 false 对应的包装类实例。
      Date、Time等:后面的日期时间比前面的日期时间大。

    3、定制排序(Comparator)

      代码示例:将学生按身高排序

     1 public class Main {
     2     public static void main(String[] args) {
     3         Student[] arr = new Student[5];
     4         arr[0] = new Student("小0", 10, 178);
     5         arr[1] = new Student("小1", 10, 181);
     6         arr[2] = new Student("小2", 10, 170);
     7         arr[3] = new Student("小3", 10, 190);
     8         arr[4] = new Student("小4", 10, 160);
     9         
    10         Arrays.sort(arr, new Comparator<Student>() {
    11             @Override
    12             public int compare(Student o1, Student o2) {
    13                 // 升序
    14                 return o1.getHeight() - o2.getHeight();
    15             }
    16         });
    17 
    18         System.out.println(Arrays.toString(arr));
    19     }
    20 }
    21 
    22 class Student {
    23     private String name;
    24     private int age;
    25     // 学生身高
    26     private int height;
    27 
    28     // 省略setter getter
    29 }

    二、日期

    1、时间戳

    1 final long l = System.currentTimeMillis();

      返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。此方法适于计算时间差。

    2、Date

      表示特定的瞬间,精确到毫秒
      代码示例:

     1 public class Main {
     2     public static void main(String[] args) {
     3         Date date = new Date();
     4         System.out.println(date);
     5 
     6         System.out.println(date.getTime());
     7 
     8         Date date1 = new Date(date.getTime());
     9 
    10         System.out.println(date1.getTime());
    11         System.out.println(date1.toString());
    12     }
    13 }

    3、SimpleDateFormat

      Date类的API不易于国际化,大部分被废弃了,SimpleDateFormat 类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
      代码示例(重要):日期格式化

     1 // 不写注释也能看懂的代码
     2 public static Date parse(String datetimeStr, String format) {
     3     try {
     4         return new SimpleDateFormat(format).parse(datetimeStr);
     5     } catch (Exception e) {
     6         return null;
     7     }
     8 }
     9 
    10 public static String format(Date date, String format) {
    11     return new SimpleDateFormat(format).format(date);
    12 }

    4、Calendar

      Calendar是一个抽象基类,用于完成日期字段之间相互操作的功能。线程安全,因为是单例的。
      代码示例:方法的使用
      获取月份时:一月是0,二月是1,……12月是11。
      获取星期时:周日是1,周二是2,……周六是7。

     1 // 不写注释也能看懂的代码
     2 public class Main {
     3 
     4     public static void main(String[] args) {
     5         String fromDate = "2016-7-29 20:00:04";
     6         String toDate = "2000-09-30 20:00:03";
     7         String dateFormat = "yyyy-MM-dd HH:mm:ss";
     8         
     9         //方式一:创建其子类(GregorianCalendar)的对象
    10         //方式二:调用其静态方法getInstance()
    11         Calendar calendar = Calendar.getInstance();
    12         calendar.setTime(dateFromString(fromDate, dateFormat));
    13 
    14         // 获取年
    15         System.out.println("YEAR== " + calendar.get(Calendar.YEAR));
    16         // 获取月 0~11
    17         System.out.println("MONTH== " + calendar.get(Calendar.MONTH));
    18         // 获取日
    19         System.out.println("DATE== " + calendar.get(Calendar.DATE));
    20         // 当前是一年的第几天
    21         System.out.println("DAY_OF_YEAR== " + calendar.get(Calendar.DAY_OF_YEAR));
    22         // 当前是本月的第几天
    23         System.out.println("DAY_OF_MONTH== " + calendar.get(Calendar.DAY_OF_MONTH));
    24         // 周几:星期天 1
    25         System.out.println("DAY_OF_WEEK== " + calendar.get(Calendar.DAY_OF_WEEK));
    26         // 在本月属于第几周
    27         System.out.println("DAY_OF_WEEK_IN_MONTH== " + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
    28         // 12小时制
    29         System.out.println("HOUR == " + calendar.get(Calendar.HOUR));
    30         // 24小时制
    31         System.out.println("HOUR_OF_DAY == " + calendar.get(Calendar.HOUR_OF_DAY));
    32         System.out.println("MINUTE == " + calendar.get(Calendar.MINUTE));
    33         System.out.println("SECOND == " + calendar.get(Calendar.SECOND));
    34         // 当月有多少天
    35         System.out.println("ActualMaximum == " + calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    36     }
    37 
    38     public static Date dateFromString(String dateString, String dateFormat) {
    39         try {
    40             return new SimpleDateFormat(dateFormat).parse(dateString);
    41         } catch (Exception e) {
    42             System.out.println("日期格式解析错误!");
    43             return null;
    44         }
    45     }
    46 }
    47 
    48 // 结果
    49 YEAR== 2016
    50 MONTH== 6
    51 DATE== 29
    52 DAY_OF_YEAR== 211
    53 DAY_OF_MONTH== 29
    54 DAY_OF_WEEK== 6
    55 DAY_OF_WEEK_IN_MONTH== 5
    56 HOUR == 8
    57 HOUR_OF_DAY == 20
    58 MINUTE == 0
    59 SECOND == 4
    60 ActualMaximum == 31
     1 public class Main {
     2     public static void main(String[] args) {
     3         Calendar calendar = Calendar.getInstance();
     4 
     5         // get()
     6         int days = calendar.get(Calendar.DAY_OF_MONTH);
     7         System.out.println(days);
     8         System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
     9 
    10         // set().calendar可变性
    11         calendar.set(Calendar.DAY_OF_MONTH, 22);
    12         days = calendar.get(Calendar.DAY_OF_MONTH);
    13         System.out.println(days);
    14 
    15         // add().在当前时间减3天
    16         calendar.add(Calendar.DAY_OF_MONTH, -3);
    17         days = calendar.get(Calendar.DAY_OF_MONTH);
    18         System.out.println(days);
    19 
    20         // getTime():日历类---> Date
    21         Date date = calendar.getTime();
    22         System.out.println(date);
    23 
    24         // setTime():Date ---> 日历类
    25         calendar.setTime(new Date());
    26         days = calendar.get(Calendar.DAY_OF_MONTH);
    27         System.out.println(days);
    28     }
    29 }

    三、System

    1、介绍

      描述系统的一些信息。System类中的方法和属性都是静态的。
      out:标准输出,默认是控制台。
      in:标准输入,默认是键盘。
      err:标准错误输出流(显示器)。
      Properties:是Hashtable的子类,也就是Map集合的一个子类对象,可以通过map的方法取出该集合中的元素。该集合中存储的都是字符串,没有泛型定义。

    2、方法

      Properties getProperties():获取系统属性信息。
      setProperties(String key, String value):在系统中自定义一些特有信息
      String getProperty(String key):获取指定属性信息。
      void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。
      void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。

      代码示例:打印一些系统信息

     1 // 打印出来看一下就知道是什么
     2 public class Main {
     3     public static void main(String[] args) {
     4         String javaVersion = System.getProperty("java.version");
     5         System.out.println("java version:" + javaVersion);
     6 
     7         String javaHome = System.getProperty("java.home");
     8         System.out.println("java home:" + javaHome);
     9 
    10         String osName = System.getProperty("os.name");
    11         System.out.println("os name:" + osName);
    12 
    13         String osVersion = System.getProperty("os.version");
    14         System.out.println("os version:" + osVersion);
    15 
    16         String userName = System.getProperty("user.name");
    17         System.out.println("user name:" + userName);
    18 
    19         String userHome = System.getProperty("user.home");
    20         System.out.println("user home:" + userHome);
    21 
    22         String userDir = System.getProperty("user.dir");
    23         System.out.println("user dir:" + userDir);
    24 
    25         final Properties properties = System.getProperties();
    26         final Set<Object> set = properties.keySet();
    27         for (Object o : set) {
    28             String value = (String) properties.get(o);
    29             System.out.println(o + "-----" + value);
    30         }
    31     }
    32 }

      系统中常见的属性名以及属性的作用如下表所示:

    属性名
    属性说明
    java.version
    Java运行时环境版本
    java.home
    Java安装目录
    os.name
    操作系统的名称
    os.version
    操作系统的版本
    user.name
    用户的账户名称
    user.home
    用户的主目录
    user.dir
    用户的当前工作目录

    四、Runtime

    1、介绍

      每个应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接。可以通过getRuntime方法获取当前运行时。应用程序不能创建自己的Runtime类实例。

    2、方法

      这是一个经典的饿汉式单例模式。

      代码示例:用记事本打开 aa.txt

    1 public class Main {
    2     public static void main(String[] args) throws Exception {
    3         final Process process = Runtime.getRuntime().exec("notepad.exe F:\aa.txt");
    4         // 线程睡眠4s
    5         Thread.sleep(4000);
    6         // 线程销毁
    7         process.destroy();
    8     }
    9 }

    五、Math

    1、介绍

      Math类包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数。

    2、方法

      new Random().nextInt(10):返回 [0,10) 的整数,伪随机数。
      random():返回[0,1)的伪随机数

      abs:绝对值
      acos,asin,atan,cos,sin,tan:三角函数
      sqrt:平方根
      pow(double a,doble b):a的b次幂
      log:自然对数
      exp:e为底指数
      max(double a,double b):取最大
      min(double a,double b):取最小
      long round(double a):double型数据a转换为long型(四舍五入)
      toDegrees(double angrad):弧度—>角度
      toRadians(double angdeg):角度—>弧度

    六、BigInteger

    1、介绍

      Integer类作为 int 的包装类,能存储的最大整型值为2^31 - 1,Long类也是有限的,最大为2^63 - 1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类,都无能为力,更不用说进行运算了。

      BigInteger可以表示不可变的任意精度的整数。

    2、方法

      BigInteger abs():返回此 BigInteger 的绝对值
      BigInteger add(BigInteger val) :返回其值为 (this + val)
      BigInteger subtract(BigInteger val) :返回其值为 (this - val)
      BigInteger multiply(BigInteger val) :返回其值为 (this * val)
      BigInteger divide(BigInteger val) :返回其值为 (this / val) 。整数相除只保留整数部分。
      BigInteger remainder(BigInteger val) :返回其值为 (this % val)
      BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
      BigInteger pow(int exponent) :返回其值为 (this^exponent)

    七、BigDecimal

    1、介绍

      一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。

      BigDecimal类支持不可变的、任意精度的有符号十进制定点数。

    2、方法

      public BigDecimal add(BigDecimal augend)
      public BigDecimal subtract(BigDecimal subtrahend)
      public BigDecimal multiply(BigDecimal multiplicand)
      public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

      代码示例:计算

     1 public class Main {
     2     public static void main(String[] args) {
     3         BigInteger bi = new BigInteger("1243324112234324324325235245346567657653");
     4         BigDecimal bd = new BigDecimal("12435.351");
     5         BigDecimal bd2 = new BigDecimal("11");
     6         System.out.println(bi);
     7 
     8         // System.out.println(bd.divide(bd2));
     9         // 表示四舍五入.其他含义自行百度
    10         System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP));
    11         System.out.println(bd.divide(bd2, 25, BigDecimal.ROUND_HALF_UP));
    12     }
    13 }

    作者:Craftsman-L

    本博客所有文章仅用于学习、研究和交流目的,版权归作者所有,欢迎非商业性质转载。

    如果本篇博客给您带来帮助,请作者喝杯咖啡吧!点击下面打赏,您的支持是我最大的动力!

  • 相关阅读:
    snmp实用篇
    使用snmp4j实现Snmp功能(三)
    使用snmp4j实现Snmp功能(二)
    使用snmp4j实现Snmp功能(一)
    “百度杯”CTF比赛 九月场_Test(海洋cms前台getshell)
    “百度杯”CTF比赛 九月场_123(文件备份,爆破,上传)
    “百度杯”CTF比赛 九月场_SQLi
    “百度杯”CTF比赛 九月场_SQL
    “百度杯”CTF比赛 九月场_再见CMS(齐博cms)
    “百度杯”CTF比赛 九月场_YeserCMS
  • 原文地址:https://www.cnblogs.com/originator/p/13894162.html
Copyright © 2020-2023  润新知