【Java】(十九)BigDecimal精确计算浮点数;Date特定时间;Calendar日历;SimpleDateFormat格式化时间 ;System系统类

Java常用类小结

对象方法都可以从API上面找:

  • 内部类:在一个类的内部再定义一个完整的类。分为四种:成员内部类、静态内部类、局部内部类、匿名内部类。
  • Object类:所有类的直接或间接父类,可存储任何对象。
  • 包装类:基本数据类型所对应的引用数据类型,可以使Object统一所有数据。
  • String类:字符串是常量,创建之后不可改变,字面值保存在字符串池中,可以共享。
  • BigDecimal:可精确计算浮点数。
  • Date:特定时间。
  • Calendar:日历
  • SimpleDateFormat:格式化时间
  • System:系统类

BigDecimal类:精确计算浮点数

  1. 很多实际应用中需要精确运算,而double是近似值存储,不在符合要求,需要借助BlgDecimal。
  2. 位置:java.math包中。
  3. 作用:精确计算浮点数
  4. 创建方式:BigDecimal bd=new BigDecimal("1.0");。【一定要用引号,不然和double一样近似值存储】
  5. 方法:
    (1)BigDecimal add(BigDecimal bd)加
    (2)BigDecimal subtract(BigDecimal bd)减
    (3)BigDecimal multiply(BigDecimal bd)乘
    (4)BigDecimal divide(BigDecimal bd)除
    除法: divide(BigDecimal bd,int scal, RoupdingMode mode)
    参数scal:指定精确到小数点后几位。
    参数model:指定小数部分的取舍模式,通常采用四舍五入的模式。取值为BigDecimal.ROUND_HALF_UP
package classs;

import java.math.BigDecimal;

public class BigDecimalText {
    public static void main(String[] args) {
        //double近似值存储
        double d1 = 1.9;
        double d2 = 0.9;
        System.out.println(d1-d2);//0.9999999999999999

        //BigDecimal高精度运算
        BigDecimal b1 = new BigDecimal("1.1");
        BigDecimal b2 = new BigDecimal("0.2");
        System.out.println(b1);
        System.out.println(b2);

        //加减乘除运算,均返回BigDecimal对象
        BigDecimal ad = b1.add(b2);
        System.out.println(ad);
        System.out.println(b1.subtract(b2));
        System.out.println(b1.multiply(b2));
        System.out.println(b1.divide(b2)); //能都整除可以直接除

        //除法测试:不能整除需要限定精度和舍入制度
        //System.out.println(new BigDecimal("10").divide(new BigDecimal("3")));//编译报错
        System.out.println(new BigDecimal("10").
                divide(new BigDecimal("3"), 3, BigDecimal.ROUND_HALF_UP));
    }
}

/*
0.9999999999999999
1.1
0.2
1.3
0.9
0.22
5.5
3.333
 */

Date类:特定时间

  1. Date表示特定的瞬间,精确到毫秒
    Date类中的大部分方法都已经被Calendar类中的方法所取代。但是过时的方法还是可以用。
  2. 时间单位:
    1秒=1000毫秒
    1毫秒=1000微秒
    1微秒=1000纳秒
  3. 构造方法:new
    Date() :分配一个 Date对象并将它初始化,它代表的时间分配给它,测量精确到毫秒。
    Date(long date) :分配一个 Date对象并将它初始化为代表指定的毫秒数自基准时间被称为“时代”,即1970年1月1日,00:00:00 GMT。
  4. 对象方法:
    long getTime() :返回毫秒数自1970年1月1日以来,该 Date对象表示00:00:00 GMT。
    boolean after(Date when) :测试如果这个日期是在指定日期之后。 同样的还有afterequals
    int compareTo(Date anotherDate) :比较两个日期。 d1.compareTo(d2);d1后返回正值,相等返回0,提前返回负值。
package classs;

import java.util.Date;

public class DateText {
    public static void main(String[] args) {
        Date d1 = new Date(); //默认构造今天
        System.out.println(d1); //运行结果同(d1.toString()
        System.out.println(d1.toLocaleString());//过时方法,仍然可用
        Date d2 = new Date(d1.getTime()-(60*60*24*1000));//通过毫秒数,修改为昨天
        System.out.println(d2.toLocaleString());

        //比较日期
        System.out.println(d1.after(d2));
        System.out.println(d1.equals(d2));
        System.out.println(d1.before(d2));
        System.out.println(d1.compareTo(d2));
    }
}
/*
Sun Oct 17 21:17:24 GMT+08:00 2021
2021-10-17 21:17:24
2021-10-16 21:17:24
true
false
false
1
 */

Calendar类:日历

  1. Calendar提供了获取或设置各种日历字段的方法。
  2. 构造方法:protected Calendar() 由于修饰符是protected,所以无法直接创建该对象
  3. 其他方法:
    在这里插入图片描述
package classs;

import java.util.Calendar;

public class CalendarText {
    public static void main(String[] args) {
        Calendar c1 = Calendar.getInstance();//不能直接创建对象

        //System.out.println(c1);//可以直接打印,长的很
        System.out.println(c1.getTime());//返回Date对象表示时间

        //get获取年、月、日..
        System.out.println("get获取时间:");
        int year = c1.get(Calendar.YEAR);
        System.out.println(year);
        System.out.println(c1.get(Calendar.MONTH));//0-11
        System.out.println(c1.get(Calendar.DAY_OF_MONTH));
        System.out.println(c1.get(Calendar.HOUR));//12小时,还有一个是24小时
        System.out.println(c1.get(Calendar.MINUTE));
        System.out.println(c1.get(Calendar.SECOND));

        //修改时间
        System.out.println("修改时间:");
        Calendar c2 = Calendar.getInstance();//set方法修改时间
        c2.set(Calendar.YEAR, 2008);
        System.out.println(c2.getTime().toLocaleString());
        c2.add(Calendar.YEAR, 2);//add方法修改时间按
        System.out.println(c2.getTime().toLocaleString());

        //获取时间常量上下线
        System.out.println("Calendar.MONTH范围:");
        System.out.println(c2.getActualMaximum(Calendar.MONTH));
        System.out.println(c2.getActualMinimum(Calendar.MONTH));
    }
}

/*
Sun Oct 17 22:38:24 GMT+08:00 2021
get获取时间:
2021
9
17
10
38
24
修改时间:
2008-10-17 22:38:24
2010-10-17 22:38:24
Calendar.MONTH范围:
11
0
 */

SimpleDateFormat类:格式化时间

  1. SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类。
  2. 进行格式化Date.format(Simple)(日期→文本)、解析Simple.parse("2020/05/20")(文本→日期)。
  3. 常用的时间模式字母
    在这里插入图片描述
package classs;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFormatText {
    public static void main(String[] args) throws Throwable {
        //先创建一个对象
        SimpleDateFormat s1 = new SimpleDateFormat("yyyy/MM/dd");
        Date d1 = new Date();

        //格式化:日期→文本
        String str = s1.format(d1);
        System.out.println(str);//2021/10/17

        //解析:文本→日期
        Date d2 = s1.parse("2020/05/20");
        System.out.println(d2);//Wed May 20 00:00:00 GMT+08:00 2020
    }
}

System类:系统

System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。
在这里插入图片描述
System.currentTimeMillis();获取时间方法可用于计算程序速率(结束时间-开始时间),在(十八)可变长字符串中使用过。
System.gc();回收垃圾方法在(十六)finalize()方法回收中使用过。

package classs;

public class SystemText {
    public static void main(String[] args) {
        System.out.println("arraycopy数组的复制");
        //参数src源数组;srcPos从哪个位置开始复制; dest目标数组;destPos目标数组的位置;length复制的长度
        int[] arr = {1,2,3,4,5,6,7,8};
        int[] dest = new int[8];
        System.arraycopy(arr, 0, dest, 2, 4);
        for(int i=0; i<dest.length; i++) {
            System.out.println(dest[i]);
        }

        //exit推出,后面程序不再执行
        System.exit(0);
        System.out.println("结束");
    }
}
/*
arraycopy数组的复制
0
0
1
2
3
4
0
0
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值