Math

:::tips

概述

  • Math包含执行基本数据运算的方法
  • 类成员如果是静态的则可通过类名直接调用

常用方法:

  • public static int abs(int a) 返回参数绝对值
  • public static double ceil(double a) 返回大于或等于参数的最小double值,等于一个整数
  • public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数
  • public static int round(float a) 按照四舍五入返回最近参数的int
  • public static double pow(double a, double b) 返回a的b次方幂
  • public static int max(int a, int b) 返回两个int值中的较大值
  • public static int min(int a, int b) 返回两个int值中的较小值
  • public static double randow() 返回值为double的正值,[0.0, 1.0)随机数 :::

    System

    :::tips

    概述:

  • System位于java.lang包下,代表当前Java程序的运行平台。

  • System类中提供了大量静态方法,可以获取与系统相关的信息或执行系统级操作

    参用方法:

  • public static void exit(int status) 终止当前运行的java虚拟机,非零表示异常终止

  • public static long currentTimeMillis 返回当前时间(以毫秒为单位)
  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)将指定源数组中的数组从指定位置复制到目标数组的指定位置。(原数组, 开始拷贝的索引, 新数组, 放入新数组的开始索引, 拷贝的个数) :::

    1. public static void main(String[] args) {
    2. //arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 拷贝数组
    3. /*rraycopy(原数组, 开始拷贝的索引, 新数组, 放入新数组的开始索引, 拷贝的个数)*/
    4. int[] arr = {1, 2, 3, 4, 5};
    5. int[] arr2 = new int[10];
    6. //[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
    7. //System.arraycopy(arr,0,arr2,0,5);
    8. //[ 0, 0, 0, 0, 2, 3, 4, 0, 0, 0]
    9. System.arraycopy(arr,1,arr2,4,3);
    10. System.out.println(Arrays.toString(arr2));
    11. }

    BigDecimal

    :::tips

    概述:

  • 因为计算机无法精确表示浮点数,所以在进行数字运算时,如果有double或float类型的浮点数参与计算,容易出现计算不准确的情况。

  • 在一些对精度要求很高的系统中,需要使用 BigDecimal 类来进行精确运行。

创建BigDecimal对象的方式

  • BigDecimal(String val) 使用 String类型的数字 作为参数。
  • BigDecimal(double val) 使用 double类型的数字 作为参数。(不推荐,容易丢精度)

使用静态方法创建对象

  • BigDecimal.valueOf(double val) 转换一个 double成 BigDecimal

BigDecimal 类的常用方法

  • public BigDecimal add(另一个BigDecimal对象) 加法
  • public BigDecimal subtract (另一个BigDecimal对象) 减法
  • public BigDecimal multiply (另一个BigDecimal对象) 乘法
  • public BigDecimal divide (另一个BigDecimal对象) 除法(能整除时使用)
  • public BigDecimal divide (另一个BigDecimal对象,保留小数的位数,舍入模式) 除法(不能整除时使用) :::

    public static void main(String[] args) {
      BigDecimal bD1 = new BigDecimal("10");
      BigDecimal bD2 = new BigDecimal("6");
    
      //相加
      BigDecimal add = bD1.add(bD2);
      System.out.println(add);
    
      //相减
      System.out.println(bD1.subtract(bD2));
    
      //相乘
      System.out.println(bD1.multiply(bD2));
    
      //相除(除不尽会报异常)ArithmeticException
      //System.out.println(bD1.divide(bD2));
    
      //解决
      /*
          divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
          BigDecimal divisor:除数
          int scale:保留小数位
          RoundingMode roundingMode:舍入模式(枚举)
      */
      System.out.println(bD1.divide(bD2, 3, RoundingMode.HALF_UP));
    }
    

    基本包装类

    | 基本数据类型 | 包装类 | | —- | —- | | byte | Byte | | short | Short | | int | Integer | | long | Long | | float | Float | | double | Double | | char | Character | | boolean | Boolean |

Integer

:::tips

概述:

  • 包装一个对象中的原始类型int的值

常用方法:

  • public static Integer valueOf(int i) 返回表示指定的int值的Integer实例
  • public static Integer valueOf(String s) 返回一个保存指定值的Integer对象String
  • int -> String
    • public static String valueOf(int i)
  • String -> int
    • public static int parseInt(String s)
  • 除了Character之外,其他七个包装类都有parseXXX(String s)的静态方法可以将字符转换为基本数据类型

自动装箱和拆箱:

  • 装箱:把基本数据类型转换为对应的包装类型
  • 拆箱:把包装类型转换为对应的基本数据类型
  • int a = 100;
  • Integer num = a; //自动装箱
  • int i = num; //自动拆箱;
  • [在使用包装类型的时候,如果做操作,最好先判断是否为null只要是对象,在使用前必须进行不为null判断] :::

    时间API—Date

    :::tips

    概述:

  • 代表特定时间,精确到毫秒

构造方法:

  • public Date() 分配一个Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
  • public Date(long date) 分配一个Date对象,并将其初始化为表示标准基准时间起指定的毫秒数

常用方法:

  • public long getTime() 获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值
  • public void setTime(long Time) 设置时间,给的是毫秒值 :::

    public static void main(String[] args) {
      //获取当前系统时间
      Date date = new Date();
      System.out.println(date);
    
      //获取1970.01.01 00:00:00年至今的毫秒值
      long time = date.getTime();
      System.out.println(time);
    }
    

    时间API—SimpleDateFormat

    :::tips

    概述:

  • java.text.SimpleDateFormat 类可以实现日期格式化(日期—>文本)和解析(文本—>日期)

    构造方法:

  • public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式

  • public SimpleDateFormat(String pattern) 构造一个SImpleDateFormat使用给定的模式和默认的日期格式

    SimpleDateFormat格式化和解析日期

  • 格式化(从Date到String)

    • public final String format(Date date) 将日期格式化为日期/时间字符串
  • 解析(从String到Date)
    • public Date parse(String source) 从给定字符串的开始解析文本以生成日期 :::

      日期模板中字母含义

      | 字母 | 含义 | | —- | —- | | y | 年份year,一般用 yy 表示2位年份,yyyy 表示 4 位年份 | | M | 月份month,一般用 MM 表示 | | d | 天数date,一般用 dd 表示 | | H | 小时hour(0~23),一般用 HH 表示 | | m | 分钟minute,一般使用 mm 表示 | | s | 秒数second,一般使用 ss 表示 |
public static void main(String[] args) {
    SimpleDateFormat sDF = new SimpleDateFormat();

    String format = sDF.format(new Date());
    System.out.println(format);

    SimpleDateFormat sDF1 = new SimpleDateFormat("HH:mm \n yyyy/MM/dd");
    System.out.println(sDF1.format(new Date()));
}
/*
    目标:使用日期转换完成需求。

需求:
    秒杀开始时间: 2020年11月11日 00:00:00
    秒杀结束时间: 2020年11月11日 00:10:00

    小贾下单并付款的时间为:
        2020年11月11日 00:03:47
    小皮单并付款的时间为:
        2020年11月11日 00:10:11
    用代码说明这两位同学有没有参加上秒杀活动?

 步骤:
    1. 将字符串格式的日期转为Date类型  parse方法
    2.将Date对象转为毫秒  getTime方法
    3.比较毫秒大小
*/
public static void main(String[] args) throws ParseException {
    SimpleDateFormat sDP = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

    long t1 = sDP.parse("2020年11月11日 00:00:00").getTime();
    long t2 = sDP.parse("2020年11月11日 00:10:00").getTime();
    long t3 = sDP.parse("2020年11月11日 00:03:47").getTime();
    long t4 = sDP.parse("2020年11月11日 00:10:11").getTime();

    System.out.println((t3 >= t1 && t3 <= t2) ? "小贾秒杀成功" : "小贾秒杀失败");
    System.out.println((t4 >= t1 && t4 <= t2) ? "小皮秒杀成功" : "小皮秒杀失败");
}

时间API—Calendar

:::tips

概述:

  • Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
  • Calendar提供一类方法getInstance用回去calendar对象,其日历字段已使用当前日期和时间初始化

创建对象:

  • Calendar rightNow = Calendar.getInstance();

    方法

  • public int get(int field) 返回指定日历字段的值

  • public final void set(int year, int month, int date) 设置当前日历的年月日
  • public abstract void add(int field, int amount) 根据日历规则,将指定的时间量添加或减去给定的日历字段
  • public long getTimeInMillis() 返回该日历时间的毫秒值。 :::

    Calendar中常用日历字段(常量)

    | 字段值 | 含义 | | —- | —- | | YEAR | 年 | | MONTH | 月(月份从0开始,0~11 表示 1月~12月) | | DATE(或 DAY_OF_MONTH ) | 日 | | HOUR | 时(12小时制) | | HOUR_OF_DAY | 时(24小时制) | | MINUTE | 分 | | SECOND | 秒 | | DAY_OF_WEEK | 周几(数字 1~7 表示 周日~周六) |
//计算出生到现在活了多少天
public static void main(String[] args) {
    Calendar instance = Calendar.getInstance();
    instance.set(2000,6,6);
    long timeInMillis = instance.getTimeInMillis();

    long now = System.currentTimeMillis();

    long days = (now - timeInMillis) / 1000 / 60 / 60 / 24;

    System.out.println(days);
}

正则表达式

:::tips

概述:

  • 正则表达式是一个强大的字符串处理工具,是用于匹配字符串的模板,可以对字符串进行格式校验,查找、提取、替换等操作。

String类中支持正则表达式的方法:

  • boolean matches(String regex) 判断该字符串是否匹配指定的正则表达式
  • String replaceAll(String regex, String replacement) 将该字符串中所有匹配正则表达式的内容替换成新的字符串,并返回替换后的新的字符串
  • String[] split(String regex) 根据匹配规则,把字符串分割成多个子串

预定义字符

  • “ . ” : 匹配一个任意字符
  • “\d“ : 匹配一个数字字符,相当于[0-9]
  • “\D“ : 匹配一个非数字,相当于[^0-9]
  • “\s“ : 匹配一个空白字符
  • “\S“ : 匹配一个非空白字符
  • “\w“ : 匹配一个单词字符,包括大小写字母,数字,下划线,相当于[a-zA-Z0-9_]
  • “\W“: 匹配一个非单词字符

数量词(限定符)

  • ? 0次或1次
    • 0次或多次 (任意次)
    • 1次或多次
  • {n} 重复n次
  • {n,} 重复n次以上 (至少n次)
  • {n,m} 重复n到m次(包括n和m)

括号分组 ( )

  • 正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。 :::
    public static void main(String[] args) {
      //定义6~18位邮箱号码,可以使用数字,字母,下划线,必须以字母开头
      System.out.println("A12345678901234567".matches("[a-zA-Z]\\w{5,17}"));
    }
    
    | Math | /mæθ/ | 数学 | | —- | —- | —- | | add | /æd/ | 相加 | | subtract | /səbˈtrækt/ | 相减 | | multiply | /ˈmʌltɪplaɪ/ | 相乘 | | divide | /dɪˈvaɪd/ | 相除 | | format | /ˈfɔːmæt/ | 格式化 | | Calendar | /ˈkælɪndə(r)/ | 日历 | | getInstance | | 获得实例 | | matches | /‘mætʃɪz/ | 匹配 |