系统学习JAVA第十五天
一、数字相关类
1、Match类下的方法
//pow计算次方的,pow(10,2)计算10的平方为100.0
System.out.println(Math.pow(10,2));
//输出E的值2.718281828459045
System.out.println(Math.E);
//输出PI(Π)的值3.141592653589793
System.out.println(Math.PI);
//sqrt计算平方根,sqrt(9)计算9的的平方根为3.0
System.out.println(Math.sqrt(9));
//floor向下取整floor(8.9)向下取整后的值为8.0
System.out.println(Math.floor(8.9));
//floor向上取整floor(8.1)向上取整后的值为9.0
System.out.println(Math.ceil(8.1));
//round是四舍五入round(4.1)四舍五入后的值为4
System.out.println(Math.round(4.1));
//随机输出一个0-10之间的整数
//Math.random()默认时是输出0-1之间的一个随机数
//Math.random()*10输出0-10之间的一个随机数(包括小数)
//new Double(Math.random()*10)新建一个Double的对象
//new Double(Math.random()*10).intValue()调用Doble包装类的方法,将double类型的数字转换成整数
System.out.println(new Double(Math.random()*10).intValue());
2、小数之间的运算float,double为不精确的小数
//输出为62.800000000000004
System.out.println(3.14*2*10);
//输出为0.060000000000000005
System.out.println(0.01+0.05);
//输出为0.5800000000000001
System.out.println(1.0-0.42);
//输出为1.2233
System.out.println(122.33/100);
3、数字之间的精确运算,所以要通过BiDecimal方法进行精确华处理
//新建BigDecimal对象b1和b2
BigDecimal b1 = new BigDecimal("7");
BigDecimal b2 = new BigDecimal("3");
//BigDecimal的加方法,得到的值为10
System.out.println(b1.add(b2));
//BigDecimal的减方法,得到的值为4
System.out.println(b1.subtract(b2));;
//BigDecimal的乘方法,得到的值为21
System.out.println(b1.multiply(b2));
//BigDecimal的除方法,得到的值为2.3333333,如果不加MathContext.DECIMAL32就会报错,因为7除3是得到的值是无限循环小数,加了MathContext.DECIMAL32就有了限制输出就不不会报错了
System.out.println(b1.divide(b2,MathContext.DECIMAL32));
4、数字如何按照指定格式输出——字符串
//想要输出的格式,当整数位有值且为多位时输出:555,444,333.00
//当整数位有值且为0时输出:0.00
//当整数位有值且为多位,小数位也有值但只输出2位小数时输出:555,444,333.93
//DecimalFormat相当于模板给数字的输出规定格式想要达到上述效果",##0.00"就可以了
DecimalFormat df = new DecimalFormat(",##0.00");
//想要使用该格式只需要使用DecimalFormat的对象调用format方法即可
String s = df.format(b1.divide(b2, MathContext.DECIMAL32));
System.out.println(s);
二、日期相关类
1、日期(年-月-日 时:分:秒)
//输出为Sat Jan 30 01:44:48 GMT+08:00 2021
Date date = new Date();
System.out.println(date);
能用Date类获取到当前系统的时间,但是不符合我们的显示方式,我们习惯的显示方式应该是这样的(2021-01-29 20:57:34)
Date————>String
//年 year y
//月 month M
//日 day d D一年中的第几天
//小时 hour h是12小时进制 H是24小时进制
//分钟 minute m
// 秒 second s是秒 S是毫秒
//将当前系统的时间转换成字符串
//日期按照指定格式输出,转换后结果的数据类型是字符串类型
//SimpleDateFormat相当于模板给日期的输出规定格式,想要达到上述我们习惯的方式"YYYY-MM-dd hh:mm:ss"就可以了
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd hh:mm:ss");
//想要使用该格式只需要使用SimpleDateFormat的对象调用format方法即可
String s = sdf.format(date);
System.out.println(s);
String————>Date
//定义应该str字符串
String str = "2021-01-22 15:30:20";
//SimpleDateFormat相当于模板给日期的输出和转换规定格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//加上try catch是因为parse的原因,它是将字符串类型的str转换成日期类型的date,但是这个转换有个要求就是字符串str必须符合SimpleDateFormat规定的格式,因为不知道你设定的字符串是什么样子的,所以使用try catch来消除非运行时的报错,将可能出错的代码放在try中
try {
//如果下面这句代码报错了,那么将直接跳到catch,这句代码下面的其他代码都不会再执行
Date date = sdf.parse(str);
System.out.println(date);
//catch会捕获出现的错误
} catch (ParseException e) {
e.printStackTrace();
}
2、日历
//输出为java.util.GregorianCalendar[time=1611944213730,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2021,MONTH=0,WEEK_OF_YEAR=5,WEEK_OF_MONTH=5,DAY_OF_MONTH=30,DAY_OF_YEAR=30,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=5,AM_PM=0,HOUR=2,HOUR_OF_DAY=2,MINUTE=16,SECOND=53,MILLISECOND=730,ZONE_OFFSET=28800000,DST_OFFSET=0]
//提取一下就是 年YEAR=2021 月MONTH=0(日历中月份是从0开始的所以要加一)
//日DAY_OF_MONTH=30 小时HOUR=2(12进制的) HOUR_OF_DAY=2(24进制的) 分钟MINUTE=16 秒SECOND=53
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
get可以获取某个字段上的值
//得到年份
System.out.println(calendar.get(Calendar.YEAR));
//得到月份
System.out.println(calendar.get(Calendar.MONTH)+1);
//得到天
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
//得到24进制的小时
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
//得到分钟
System.out.println(calendar.get(Calendar.MINUTE));
清空和set
//在原来的日历对象的基础上进行的修改,可以先清空
calendar.clear();
//设置年份为2012
calendar.set(Calendar.YEAR,2012);
/设置年份为2018,月份为5月,日为第五日
calendar.set(2018,5,1);
//输出
System.out.println(calendar);
计算时间间隔后的时间
//1年,3个月,20天之后是哪一天!!!!!!
//通过add计算一个时间段后,具体的是哪一天
calendar.add(Calendar.YEAR,1);
calendar.add(Calendar.MONTH,3);
calendar.add(Calendar.DAY_OF_MONTH,20);
System.out.println(calendar);
有用的数据也就只是那几个,而且为了方便我们看明白,还是需要对其进行格式化
Calendar————>Date————>String
//SimpleDateFormat相当于模板给日期的输出规定格式,想要达到上述我们习惯的方式"YYYY-MM-dd hh:mm:ss"就可以了
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//因为simpleDateFormat.format()不能直接将Calendar类型的数据转换为字符串
//所以先调用calendar的方法getTime()将Calendar类型的数据转换为Date类型
Date date= calendar.getTime();
//再用format方法将其转换为字符串类型
String s = simpleDateFormat.format(date);
//输出的值为2021-01-30 02:49:24
System.out.println(s);
String————>Date————>Calendar
String str= "2021-01-22 15:30:20";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
simpleDateFormat.parse(str);
Calendar c = simpleDateFormat.getCalendar();
System.out.println(c);
} catch (ParseException e) {
e.printStackTrace();
}
三、处理异常
异常结构图
1、第一种解决错误的方式——捕获异常
String str= "2021-01-22 15:30:20";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try{
//try {可能发生异常的代码和使用可能发生异常代码的返回值的代码}
Date date = simpleDateFormat.parse(str);
int a = 10/0;
//如果try中代码异常发生了则发生异常后的代码都不执行
System.out.println(date);
System.out.println(date);
System.out.println(date);
System.out.println(date);
System.out.println(date);
} catch (ParseException e) {
//catch包裹,捕获到现在发生的异常的对象,这是虚拟机创建的对象
//异常发生了catch中的代码执行,如果异常不发生catch中的代码不执行
//一个try可以有多个catch
e.printStackTrace();
} catch (ArithmeticException e){
e.printStackTrace();
}
2、第二种解决错误的方式
可以再方法上加throws异常类型
parse方法再main方法被调用,执行了方法,就把异常抛给谁
throws进行多个异常抛出时,可以用逗号隔开