Math类
基本介绍
math类包含用于执行基本数学运算的静态方法,如初等指数、对数、平方根和三角函数。
Math类常用方法
package com.study.srv.demo12;
/**
* @author Wen先森
* @version 1.0
* @date 2022/3/14 14:41
*/
public class Demo01 {
public static void main(String[] args) {
//1.abs 绝对值
int abs=Math.abs(-2);
System.out.println(abs);
//2.pow 求幂
double pow=Math.pow(2,3);//2的3次方
System.out.println(pow);
//3.ceil 向上取整,返回>=该参数的最小整数
double ceil =Math.ceil(3.02);
System.out.println(ceil);
//4.floor 向下取整,返回<=该参数的最小整数
double floor=Math.floor(3.99);
System.out.println(floor);
//5.round 四舍五入
long round=Math.round(5.2);
System.out.println(round);
//6.sqrt求开方
double sqrt=Math.sqrt(6.0);
System.out.println(sqrt);
//7.random求随机数
//获取一个a~b之间的一个随机整数。int num=(int)(Math.random()*(b-a+1)+a)
System.out.println((int)(Math.random()*(10)));
//8.max 求最大值
System.out.println(Math.max(2,3));
//8.min 求最小值
System.out.println(Math.min(2,3));
}
}
Arrays类
Arrays里面包含了一系列静态方法,用于管理或操作数组(比如排序和搜素)。
方法名 |
方法说明 |
toString() |
返回数组的字符串形式 |
sort() |
数组排序(自然排序和定制排序) |
binarySearch() |
通过二分搜索法进行查找,要求先排好序 |
copyOf() |
数组元素复制 |
fill() |
数组元素填充 |
equals() |
比较数组是否完全一致 |
asList |
将一组值,转换成list |
package com.study.srv.demo12;
import java.util.Arrays;
import java.util.List;
/**
* @author Wen先森
* @version 1.0
* @date 2022/3/14 15:33
*/
public class Demo02 {
public static void main(String[] args){
Integer [] a={-2,1,6,3,12,5};
//1.Arrays.toString() 显示数组
System.out.println(Arrays.toString(a));
//2.Arrays.sort() 排序
//因为数组是引用类型,所以通过sort排序后,会直接影响到实参a
//也可以通过传入一个接口Comparator实现定制排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//3.binarySearch() 二分法查找 存在返回数组下标,不存在返回-(low+1)即所查找的数应该在的地方+1
//什么是应该在的地方,如:找10,6<10<12,所以它应该在12的位置,即数组下标为5
int index=Arrays.binarySearch(a,10);
System.out.println(index);
//4.copyOf() 数组元素复制 从a数组中,拷贝a.length个数组到newA数组中
//如果拷贝的长度大于a.length,就在新数组的后面,增加null
//如果拷贝长度小于0,则会抛出异常NegativeArraySizeException
Integer[] newA=Arrays.copyOf(a,a.length);
System.out.println(Arrays.toString(newA));
//5.fill 数组元素填充 即填入一个数替换原来的数组元素
Integer[] num=new Integer[]{1,6,5,20,33,20,20};
Arrays.fill(num,10);
System.out.println(Arrays.toString(num));
//6.equals 比较两个数组元素内容是否完全一致
Integer [] a2={-2,1,6,3,12,5};
Integer [] a3={-2,1,6,3,12,5};
System.out.println(Arrays.equals(a3,a2));
//7.asList 将数组转成一个List集合
//返回的asList编译类型 List(接口)
//asList 运行类型是Arrays类里面的内部私有方法ArrayList
List<Integer> aslist=Arrays.asList(a2);
System.out.println(aslist);
System.out.println(aslist.getClass());
}
}
System类
方法名 |
方法说明 |
exit() |
退出当前程序 |
arrayCopy() |
复制数组元素,比较适合底层调用,一般使用Arrays.copyOf完成复制数组 |
currentTimeMilens() |
返回当前时间距离1970-1-1的毫秒数 |
gc() |
运行垃圾回收机制 |
package com.study.srv.demo12;
import java.util.Arrays;
/**
* @author Wen先森
* @version 1.0
* @date 2022/3/15 16:34
*/
public class Demo05 {
public static void main(String[] args) {
//1.exit 退出当前程序
// System.out.println("退出");
// System.exit(0);
// System.out.println("退出失败");
//2.arrayCopy 复制数组元素
int[] s = {1, 2, 3};
int[] arr = new int[3];
/*
* @param src the source array.被复制数组元素的来源(源数组)
* @param srcPos starting position in the source array.复制数组元素的起始下标
* @param dest the destination array.目标数组(即把源数组的数据拷贝到那个数组)
* @param destPos starting position in the destination data.目标数组的起始下标
* @param length the number of array elements to be copied.要复制的数组元素数(从源数组拷贝多少个数据到目标数组)
*/
System.arraycopy(s, 2, arr, 1, 1);
System.out.println(Arrays.toString(arr));
//3.currentTimeMillis 返回当前时间距离1970-1-1的毫秒数
System.out.println(System.currentTimeMillis());
}
}
BigInteger和BigDecimal类
- BigInteger适合保存比较大的整型。
- BigDecimal适合保存精度更高的浮点型(小数)。
常用方法名 |
方法说明 |
add() |
加 |
subtract() |
减 |
multiply |
乘 |
divide |
除 |
package com.study.srv.demo12;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* @author Wen先森
* @version 1.0
* @date 2022/3/15 17:03
*/
public class Demo06 {
public static void main(String[] args) {
//当我们编程中,遇到需要处理很大的整数,但是long不够用,就可以使用BigInteger类搞定
// long l=12345678911223345667899555;
BigInteger i = new BigInteger("12345678911223345667899555");
System.out.println(i);
//对BigInteger 进行加减乘除是,要用相应的方法,不能直接使用+、-、*、/。
BigInteger add=i.add(BigInteger.valueOf(123456));
BigInteger sub=i.subtract(BigInteger.valueOf(123456));
BigInteger mul=i.multiply(BigInteger.valueOf(123456));
BigInteger div=i.divide(BigInteger.valueOf(123456));
System.out.println(add);
System.out.println(sub);
System.out.println(mul);
System.out.println(div);
//当我们需要保存一个高精度的数时,double不够用,可以使用BigDecimal
//对BigDecimal进行加减乘除是,要用相应的方法,不能直接使用+、-、*、/。
// double b=3.141592678165498286289668855;
// System.out.println(b);
BigDecimal b = new BigDecimal("3.1415926846871456622924553");
System.out.println(b);
BigDecimal addD=b.add(BigDecimal.valueOf(3.14236));
BigDecimal subD=b.subtract(BigDecimal.valueOf(3.14236));
BigDecimal mulD=b.multiply(BigDecimal.valueOf(3.14236));
//调用divide方法,指定精度即可,BigDecimal.ROUND_CEILING
BigDecimal divD=b.divide(BigDecimal.valueOf(3.14236),BigDecimal.ROUND_CEILING);
System.out.println(addD);
System.out.println(subD);
System.out.println(mulD);
System.out.println(divD);
}
}
日期类
第一代日期类
- Date:精确到毫秒,代表特定是瞬间
- SimpleDateFormat:格式和解析日期的类。它允许进行格式化(日期—>文本)、解析(文本—>日期)和规范化。
字母序列 |
描述 |
示例 |
d |
一个月中一位或两位数的日期 |
1-31 |
dd |
一个月中两位数的日期 |
01-31 |
DDD |
一年中三位数的日期 |
001-366 |
EEE |
一周中缩写的日期 |
Mon-Sun |
EEEE |
一周中日期全称 |
Monday-Sunday |
M |
一位或两位数的月份 |
1-12 |
MM |
两位数的月份 |
01-12 |
MMM |
三个字母的月份缩写 |
Jan-Dec |
MMMMM |
月份的全称 |
January-December |
y |
一位或两位数的年份 |
0-99 |
yy |
两位数的年份 |
00-99 |
yyyy |
四位数的年份 |
2022 |
a |
表示AM或PM |
AM或PM |
h |
上午/下午(1-12)中的一位或两位数的小时数 |
1-12 |
hh |
上午/下午(1-12)中的两位数的小时数 |
01-12 |
H |
一天(1-12)中的一位或两位数的小时数 |
0-23 |
HH |
一天(1-12)中的两位数的小时数 |
00-23 |
m |
一小时中一位或两位数的分钟数 |
0-59 |
mm |
一小时中两位数的分钟数 |
00-59 |
s |
一分钟中一位或两位数的秒数 |
0-59 |
S |
一位、两位或三位数的毫秒数 |
0-999 |
ss |
一分钟中两位数的秒数 |
00-59 |
SSS |
三位数的毫秒数 |
000-999 |
z或zzz |
三个字母的时区缩写 |
EST、CST等 |
Z |
相对于GMT的时区 |
-0500、-0600等 |
package com.study.srv.demo12;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author Wen先森
* @version 1.0
* @date 2022/3/15 18:02
*/
public class Demo07 {
public static void main(String[] args) throws ParseException {
Date date = new Date();//获取当前系统时间 默认输出日期格式是国外的格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E");//设置日期格式
String time=simpleDateFormat.format(date);//将日期转换成指定格式的字符串
System.out.println("当前日期:"+time);
Date d = new Date(124567);
System.out.println("通过毫秒数转换成日期:"+simpleDateFormat.format(d));
String s="2022年03月15日 06:40:27 星期二";
Date pare=simpleDateFormat.parse(s);//也可以将指定格式的字符串转换成日期,
// 得到的Date输出时依旧是按照国外的形式,如果希望指定格式输出,需要转换
// String——>Date, 使用simpleDateFormat格式需要和你给的String格式一样,否则抛出转换异常
System.out.println("通过指定格式的字符串转换成日期:"+pare);
// new Date()
}
}
第二代日期类
- 第二代日期类,主要就是Calendar类(日历)
- Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段(例如获得下星期的日期)提供了一些方法。
package com.study.srv.demo12;
import java.util.Calendar;
/**
* @author Wen先森
* @version 1.0
* @date 2022/3/15 19:00
*/
public class Demo08 {
public static void main(String[] args) {
//Calendar是一个抽象类,并且构造器是private
//可以通过getInstance()来获取实例
//提供大量的方法和字段给程序员
Calendar c=Calendar.getInstance();//创建日历类对象
System.out.println("c"+c);
System.out.println("年:"+c.get(Calendar.YEAR));
System.out.println("月:"+(c.get(Calendar.MONTH)+1));//因为Calendar返回月的时候,是从0开始编号,所以+1
System.out.println("日:"+c.get(Calendar.DAY_OF_MONTH));
System.out.println("时:"+c.get(Calendar.HOUR));//这是12小时制的,24小时制的用HOUR_OF_DAY
System.out.println("分:"+c.get(Calendar.MINUTE));
System.out.println("秒:"+c.get(Calendar.SECOND));
System.out.println(c.get(Calendar.YEAR)+"-"+(c.get(Calendar.MONTH)+1)+"-"+c.get(Calendar.DAY_OF_MONTH)
+" "+c.get(Calendar.HOUR_OF_DAY)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND));
}
}
第三代日期类
JDK1.0中包含了一个java.util.Date类,但它的大多数方法已经在JDK1.1引入Calendar类之后被弃用了。而Calendar也存在的问题是:
- 可变性:像日期和时间这样的类应该是不可变的。
- 偏移性:Date中的年份是从1900开始的,月份确实从0开始的。
- 格式化:格式化只对Date有用,对Calendar无效。
- 此外,它们也不是线程安全的;不能处理闰秒等(每隔两天,多出1秒)。
第三代日期类常用方法
1.LocalDate(日期/年月日)、LocalTime(时间/时分秒)、LocalDateTime(日期时间)JDK8加入。
LocalDate只包含日期,可以获得日期字段。
LocalTime只包含时间,可以获取时间字段。
LocalDateTime包含日期+时间,可以获取日期和时间字段。
LocalDate ld=LocalDate.now();//当前日期
System.out.println(ld);
LocalTime lt=LocalTime.now();//当前时间
System.out.println(lt);
LocalDateTime ldt=LocalDateTime.now();//当前日期时间
System.out.println(ldt);
//1.使用now() 表示返回当前的时间的对象
System.out.println("年:"+ldt.getYear());//年
System.out.println("月(英文):"+ldt.getMonth());//月(英文)
System.out.println("月(数字):"+ldt.getMonthValue());//月(数字)
System.out.println("日(按照月):"+ldt.getDayOfMonth());//日(按照月)
System.out.println("日(按照周):"+ldt.getDayOfWeek());//日(按照周)
System.out.println("日(按照年):"+ldt.getDayOfYear());//日(按照年)
System.out.println("时:"+ldt.getHour());//时
System.out.println("分:"+ldt.getMinute());//分
System.out.println("秒:"+ldt.getSecond());//秒
2.DateTimeFormatter格式日期类
类似于SimpleDateFormat
DateTimeFormatter dtf=DateTimeFormatter.ofPattern(格式);
String str=dtf.format(日期对象);
DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy年-MM月-dd日 hh:mm:ss");
String time=dtf.format(ldt);
System.out.println(time);
3.Instant时间戳
类似于Date
提供了一系列和Date类转换的方式
Instant——》Date;
Date date=Date.form(instant);
Date——》Instant;
Instant instant=date.toInstant();
Instant is=Instant.now();
Date date=Date.from(is);
System.out.println(date);
Date date1 = new Date();
Instant instant=date1.toInstant();
System.out.println(instant);