BigDecimal
很多实际应用中需要精确运算,而double是近似值存储,不再符合要求,需要借助BigDecimal
位置:java.math包中
作用:精确计算浮点数
创建方式: BigDecimal bd = new BigDecimal(“1.0”);
如果除不尽
除法:divide(BigDecimal bd,int scal,RoundingMole mode)
参数scal:指定精确到小数点后几位
参数mode:指定小数部分的取舍模式,通常采用四舍五入的模式
取值为BigDecimal.ROUND_HALF_UP
public class Demo01 {
public static void main(String[] args) {
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1-d2);//0.09999999999999998
//BigDecimal,大的浮点数的精确计算
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//减法
BigDecimal r1 = bd1.subtract(bd2);
System.out.println(r1);
//加法
BigDecimal r2 = bd1.add(bd2);
System.out.println(r2);
//乘法
BigDecimal r3 = bd1.multiply(bd2);
System.out.println(r3);
//除法
BigDecimal r4=new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"));
System.out.println(r4);
}
}
//结果
0.09999999999999998
0.1
1.9
0.90
1
Date类
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代
时间单位
1秒 = 1000 毫秒 1毫秒 = 1000 微秒 1微秒 = 1000纳秒
public class DateCalendar {
public static void main(String[] args) {
//创建Date对象
//今天
Date date1 = new Date();
System.out.println(date1.toString());
//昨天
Date date2 = new Date(date1.getTime() - 60 * 60 * 24*1000);
System.out.println(date2.toString());
//方法after before
boolean b1 = date1.after(date2);
System.out.println(b1);//true
boolean b2 = date1.before(date2);
System.out.println(b2);//false
//比较compareTo();
int d = date1.compareTo(date2);
System.out.println(d);//1
int d1 = date2.compareTo(date1);
System.out.println(d1);//-1
//比较是否相等equals()
boolean b3 = date1.equals(date2);
System.out.println(b3);//false
}
}
Calendar类
Calendar提供了获取或设置各种日历字段的方法
构造方法
protected Calendar():由于修饰符是protected 所以无法直接创造该对象
public class trueCalendar {
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime().toString());
//获取时间信息
//获取年 月 日 小时 分钟 秒
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);//0~11
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);//HOUR12小时 HOUR_OF_DAY24小时
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"小时"+minute+"分钟"+second+"秒");
//修改时间
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.DAY_OF_MONTH,5);//修改为5号
System.out.println(calendar1.getTime().toString());
//4add方法修改时间
calendar1.add(Calendar.HOUR,1);//1代表增加一个小时 -1的话就代表减少一个小时
System.out.println(calendar1.getTime().toString());
//补充方法
int max = calendar1.getActualMaximum(Calendar.DAY_OF_MONTH);//当前月的最大天
int min = calendar1.getActualMinimum(Calendar.DAY_OF_MONTH);//当前月的最小天
System.out.println(max);
System.out.println(min);
}
}
Sat Jun 19 16:07:19 CST 2021
2021年6月19日16小时7分钟19秒
Sat Jun 05 16:07:19 CST 2021
Sat Jun 05 17:07:19 CST 2021
30
1
SimpleDateFoemat
是一个以与语言环境有关的方式来格式化和解析日期的具体类
进行格式化(日期->文本) 、 解析(文本->日期)
public class SimpleDateFormatMethod {
public static void main(String[] args) {
//创建对象 y 年
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
//创建Date
Date date = new Date();
//格式化date(把日期转换成字符串)
String str = sdf.format(date);
System.out.println(str);
}
}
System 类
System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的
public class SystemMethod {
public static void main(String[] args) {
//arraycopy数组的复制
//src 原数组 srcPos 从哪个位置开始复制
//dest目标数组 destPos目标数组位置 length 复制的长度
int [] arr = {20,18,15,18,3,2,33,90};
int [] dest = new int[8];
System.arraycopy(arr,0,dest,0,arr.length);
for (int i = 0; i < dest.length; i++) {
System.out.println(dest[i]);
}
//可以用来计算时间毫秒数
System.out.println(System.currentTimeMillis());
long start = System.currentTimeMillis();
for(int i=0;i<9999;i++)
{
for(int j = 0;j<999;j++)
{
int result = i+j;
}
}
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
//System.gc();告诉垃圾回收器回收
new Student("小明",19);
new Student("小1",19);
new Student("小2",19);
System.gc();
//退出jvm
System.exit(0);//已经结束了后面的语句不执行了
System.out.println("程序退出了");
}
}
public class Student {
private String name ;
private int age ;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
protected void finalize() throws Throwable {
System.out.println("回收了"+name);
}
}
20
18
15
18
3
2
33
90
1624185441594
用时:5
回收了小2
回收了小1
回收了小明