Math
概述
- 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
概述:
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)将指定源数组中的数组从指定位置复制到目标数组的指定位置。(原数组, 开始拷贝的索引, 新数组, 放入新数组的开始索引, 拷贝的个数) :::
public static void main(String[] args) {
//arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 拷贝数组
/*rraycopy(原数组, 开始拷贝的索引, 新数组, 放入新数组的开始索引, 拷贝的个数)*/
int[] arr = {1, 2, 3, 4, 5};
int[] arr2 = new int[10];
//[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
//System.arraycopy(arr,0,arr2,0,5);
//[ 0, 0, 0, 0, 2, 3, 4, 0, 0, 0]
System.arraycopy(arr,1,arr2,4,3);
System.out.println(Arrays.toString(arr2));
}
BigDecimal
概述:
因为计算机无法精确表示浮点数,所以在进行数字运算时,如果有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
概述:
- 包装一个对象中的原始类型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
概述:
代表特定时间,精确到毫秒
构造方法:
- 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
概述:
java.text.SimpleDateFormat 类可以实现日期格式化(日期—>文本)和解析(文本—>日期)
构造方法:
public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式
public SimpleDateFormat(String pattern) 构造一个SImpleDateFormat使用给定的模式和默认的日期格式
SimpleDateFormat格式化和解析日期
格式化(从Date到String)
- public final String format(Date date) 将日期格式化为日期/时间字符串
- 解析(从String到Date)
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
概述:
- 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);
}
正则表达式
概述:
- 正则表达式是一个强大的字符串处理工具,是用于匹配字符串的模板,可以对字符串进行格式校验,查找、提取、替换等操作。
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)
括号分组 ( )
- 正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。
:::
| 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/ | 匹配 |public static void main(String[] args) { //定义6~18位邮箱号码,可以使用数字,字母,下划线,必须以字母开头 System.out.println("A12345678901234567".matches("[a-zA-Z]\\w{5,17}")); }