zoukankan      html  css  js  c++  java
  • 20-常用API

    1. System

    • System 类代表系统,系统级的很多属性和控制方法都放置在该类的内部;该类位于 java.lang 包。
    • 由于该类的构造器是 private 的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是 static 的,所以也可以很方便的进行调用。
    • 变量
      • public static final InputStream in“标准”输入流。此流已打开并准备提供输入数据
      • public static final PrintStream out“标准”输入流。此流已打开并准备提供输入数据
      • public static final PrintStream err“标准”错误输出流。此流已打开并准备接受输出数据
    • 常用方法
      • native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数
      • void exit(int status):该方法的作用是退出程序。其中 status 的值为 0 代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等
      • void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况
      • String getProperty(String key):该方法的作用是获得系统中属性名为 key 的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:

    2. Date

    • 构造器
      • Date():使用无参构造器创建的对象可以获取本地当前时间
      • Date(long date):分配 Date 对象并初始化此对象,以1970 年 1 月 1 日 00:00:00 GMT 以来的指定毫秒数
    • 常用方法
      • getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数
      • toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy;其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz 是时间标准,例如:Tue Jul 07 18:02:40 GMT+08:00 2020
    • java.sql.Date ←→ java.util.Date
      • java.sql.Datejava.util.Date:多态,java.sql.Date extends java.util.Date
      • java.util.Datejava.sql.Date
        java.util.Date d1 = new java.util.Date();
        java.sql.Date d2 = new java.sql.Date(d1.getTime());
        

    3. SimpleDateFormat

    • 作用:Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat 类是一个不与语言环境有关的方式来格式化解析日期 Date 的具体类
      • public SimpleDateFormat():默认的模式和语言环境创建对象
      • public SimpleDateFormat(String pattern):该构造方法可以用参数模式pattern指定的格式创建一个对象
    • 定义了以下模式字母
    • 2 个操作
      • 格式化 [日期(Date) → 文本(String)]:public String format(Date date)
      • 解析 [文本(String) → 日期(Date)]:public Date parse(String source)
    • 举例说明
      @Test
      public void test() throws ParseException {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
          // 格式化
          String format = sdf.format(new Date());
          System.out.println(format); // 2020-07-08
          // 解析
          Date date = sdf.parse("1998-10-18 07:00:00");
          System.out.println(date); // Sun Oct 18 00:00:00 GMT+08:00 1998
      }
      
    1. 字符串"2020-07-08" 转换成 java.sql.Date 对象
      String str = "2020-07-08";
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      java.util.Date date1 = sdf.parse(str);
      java.sql.Date date2 = new java.sql.Date(date1.getTime());
      
    2. 渔夫从 1990-01-01 开始,三天打鱼两天晒网,问 2020-07-08 他在干嘛?
      public void test2() throws ParseException {
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
          Date start = sdf.parse("1990-01-01");
          Date end = sdf.parse("2020-07-08");
          long day = (end.getTime() - start.getTime())/(1000*60*60*24) + 1;
          // day % 5 == 1, 2, 3 → 打鱼
          // day % 5 == 4, 0 → 晒网
          System.out.println(day % 5);
      }
      

    4. Calendar

    • Calendar 是一个抽象基类,主用用于完成日期字段之间相互操作的功能
    • 获取 Calendar 实例的方法:Calendar.getInstance() // 底层调用它的子类 GregorianCalendar 的构造器
    • 常用方法
      • public int get(int field)
      • public void set(int field, int value)
      • public void add(int field, int amount)
      • public final Date getTime()
      • public final void setTime(Date date)
    • 注意
      • 获取月份时:一月是0,二月是1,...,12月是11
      • 获取星期时:周日是1,周二是2,...,周六是7
    // get()
    int days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);
    System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
    
    // set()
    //calendar可变性
    calendar.set(Calendar.DAY_OF_MONTH, 22);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);
    
    // add()
    calendar.add(Calendar.DAY_OF_MONTH, -3); // 减
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);
    
    // getTime(): 日历类 → Date
    Date date = calendar.getTime();
    System.out.println(date);
    
    // setTime(): Date → 日历类
    Date date1 = new Date();
    calendar.setTime(date1);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);
    

    5. JDK8 新日期时间 API

    日期时间API的迭代:

    1. JDK1.0 Date 类
    2. JDK1.1 Calendar 类,一定程度上替换 Date 类
    3. JDK1.8 提出的新 API

    5.1 LocalXxx

    • 新时间日期的包
      • java.time – 包含值对象的基础包
      • java.time.chrono – 提供对不同的日历系统的访问
      • java.time.format – 格式化和解析时间和日期
      • java.time.temporal – 包括底层框架和扩展特性
      • java.time.zone – 包含时区支持的类
    • LocalDateLocalTimeLocalDateTime 类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用 ISO-8601 日历系统的日期、时间、日期和时间。 它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息
      • LocalDate 代表IOS格式(yyyy-MM-dd) 的日期
      • LocalTime 表示一个时间,而不是日期
      • LocalDateTime 是用来表示日期和时间的,这是一个最常用的类之一(类似于Calendar)
    • 常用方法
    public void test() {
        // now(): 获取当前的日期、时间、日期时间
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDate); // 2020-07-08
        System.out.println(localTime); // 20:03:16.986
        System.out.println(localDateTime); // 2020-07-08T20:03:16.987
    
        // of(...): 以指定时间生成一个日期对象(没有偏移量,dont worries)
        LocalDateTime localDateTime1 = LocalDateTime.of(1998, 10, 18, 07, 30, 13);
        System.out.println(localDateTime1);
    
        // getXxx(): 获取相关属性
        System.out.println(localDateTime.getDayOfMonth());
        System.out.println(localDateTime.getDayOfWeek());
        System.out.println(localDateTime.getMonthValue());
        System.out.println(localDateTime.getDayOfYear());
    
        // withXxx(...): 设置相关属性;体现不可变性
        LocalDate localDate1 = localDate.withDayOfMonth(21);
        System.out.println(localDate.getDayOfMonth());
        System.out.println(localDate1.getDayOfMonth());
        System.out.println(localDate1 == localDate); // false
        LocalDateTime localDateTime2 = localDateTime.withHour(1);
        System.out.println(localDateTime.getHour());
        System.out.println(localDateTime2.getHour());
    
        // plusXxx(...): 原有基础上增加;体现不可变性
        LocalDateTime localDateTime3 = localDateTime.plusMonths(2);
        System.out.println(localDateTime.getMonth());
        System.out.println(localDateTime3.getMonth());
    
        // minusXxx(...): 原有基础上删去;体现不可变性
        LocalDateTime localDateTime4 = localDateTime.minusHours(6);
        System.out.println(localDateTime.getHour());
        System.out.println(localDateTime4.getHour());
    }
    

    5.2 Instant

    • Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳
    • 在处理时间和日期的时候,我们通常会想到年,月,日,时,分,秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向机器的,或者说是连续的。在此模型中,时间线中的一个点表示为一个很大的数,这有利于计算机处理。在UNIX中,这个数从1970年开始,以秒为的单位;同样的,在Java中,也是从1970年开始,但以毫秒为单位
    • java.time 包通过值类型Instant提供机器视图,不提供处理人类意义上的时间单位。Instant 表示时间线上的一点,而不需要任何上下文信息,例如,时区。 概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC) 开始的秒数。因为 java.time 包是基于纳秒计算的,所以 Instant 的精度可以达到纳秒级
    • (1 ns = 10-9 s) 1秒 = 1000毫秒 = 10^6 微秒 = 10^9 纳秒
    • 常用方法
    public void test1() {
        // now(): 中时区(本初子午线) 的时间
        Instant instant = Instant.now();
        System.out.println(instant); // 2020-07-08T12:33:23.603Z
        OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));// 东八区
        System.out.println(offsetDateTime); // 2020-07-08T20:33:23.603+08:00|
        // 返回1970-01-01 00:00:00到当前时间的毫秒数
        long milli = instant.toEpochMilli();
        System.out.println(milli);
        // 返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
        Instant instant1 = Instant.ofEpochMilli(milli);
        System.out.println(instant1);
        // Instant 类似于 java.util.Date
    }
    

    5.3 DateTimeFormatter

    • java.time.format.DateTimeFormatter 类,该类提供了 3 种格式化方法:
      • 预定义的标准格式,如:ISO_LOCAL_DATE_TIMEISO_LOCAL_DATEISO_LOCAL_TIME
      • 本地化相关的格式,如:ofLocalizedDateTime(FormatStyle.LONG)
      • 自定义的格式,如:ofPattern("yyyy-MM-dd hh:mm:ss")
    • 演示格式1、格式3
      public void test2() {
          // 方式1:预定义的标准格式
          DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
          // LocalDate, LocalTime, LocalDateTime 均实现 TemporalAccessor<I>
          LocalDateTime now = LocalDateTime.now();
          // --- 格式化
          String str1 = formatter.format(now);
          System.out.println(str1); // 2020-07-08T20:53:15.267
          // --- 解析
          TemporalAccessor accessor = formatter.parse("2020-07-08T20:53:15.267");
          System.out.println(accessor); // {},ISO resolved to 2020-07-08T20:53:15.267
      
          // 方式3:自定义的格式
          DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
          // --- 格式化
          String str4 = formatter3.format(now);
          System.out.println(str4); // 2020-07-08 09:15:44
          // --- 解析
          TemporalAccessor accessor1 = formatter3.parse("2010-08-15 08:00:00");
          System.out.println(accessor1); // {SecondOfMinute=0, NanoOfSecond=0, MilliOfSecond=0,
          // HourOfAmPm=8, MicroOfSecond=0, MinuteOfHour=0},ISO resolved to 2010-08-15
      }
      
    • 演示格式2

    6. 比较器

    • 在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题
    • Java实现对象排序的方式有 2 种:
      • 自然排序:java.lang.Comparable
      • 定制排序:java.util.Comparator

    6.1 自然排序(Comparable)

    • Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
      public interface Comparable<T> {
          public int compareTo(T o);
      }
      
    • 实现 Comparable 接口的对象列表(和数组)可以通过 Collections.sort()Arrays.sort() 进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器
    • 重写 compareTo 方法的规则:
      • 如果 this 大于形参对象 obj,则返回正整数
      • 如果 this 小于形参对象 obj,则返回负整数
      • 如果 this 等于形参对象 obj,则返回 0
    • Comparable 的典型实现(默认都是从小到大排列的):
      • String:按照字符串中字符的 Unicode 值进行比较
      • Character:按照字符的 Unicode 值来进行比较
      • 数值类型对应的包装类以及 BigInteger、BigDecimal:按照它们对应的数值大小进行比较
      • Boolean:true 对应的包装类实例大于 false 对应的包装类实例
      • Date、Time等:后面的日期时间比前面的日期时间大

    6.2 定制排序(Comparator)

    • 当元素的类型没有实现 java.lang.Comparable 接口而又不方便修改代码, 或者实现了 java.lang.Comparable 接口的排序规则不适合当前的操作,那 么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排序的比较
      public interface Comparator<T> {
          int compare(T o1, T o2);
      }
      
    • 重写 compare(Object o1, Object o2),比较 o1 和 o2 的大小:
      • 返回正整数,表示 o1 大于 o2
      • 返回负整数,表示 o1 小于 o2
      • 返回 0,表示 o1 和 o2 相等
    • Comparable<I>Comparator<I> 使用上的对比
      • Comparable<I> 的方式一旦指定,保证 Comparable<I> 接口实现类的对象在任何位置上都可以比较大小
      • Comaprator<I> 属于临时性的比较

    7. Math

    java.lang.Math 提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型

    8. BigInteger、BigDecimal

    • BigInteger
      • Integer 类作为 int 的包装类,能存储的最大整型值为 2^31 - 1,Long 类也是有限的, 最大为2^63 - 1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。
      • java.math 包的 BigInteger 可以表示不可变的任意精度的整数。BigInteger 提供 所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、 位操作以及一些其他操作
      • 构造器:BigInteger(String val) 根据字符串构建 BigInteger 对象
      • 常用方法
    • BigDecimal
      • 一般的 Float 类和 Double 类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal
      • BigDecimal 类支持不可变的、任意精度的有符号十进制定点数
      • 构造器
        • public BigDecimal(double val)
        • public BigDecimal(String val)
      • 常用方法
        • public BigDecimal add(BigDecimal augend)
        • public BigDecimal subtract(BigDecimal subtrahend)
        • public BigDecimal multiply(BigDecimal multiplicand)
        • public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
  • 相关阅读:
    Kettle使用kettle.properties
    kettle 获取文件名
    连接池的补充设置,应用到上面所有数据源中
    kettle 获取某个目录下所有的文件
    不小心删库了怎么办,用binlog可以恢复
    江北的KETTLE学习日志
    Python3 中,bytes 和 str
    kettle入门(四) 之kettle取昨天时间&设置任意时间变量案例
    30-Day Leetcoding Challenge Day17(构造并查集)
    30-Day Leetcoding Challenge Day16
  • 原文地址:https://www.cnblogs.com/liujiaqi1101/p/13283241.html
Copyright © 2011-2022 走看看