栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习java的第二十五天,StringBuffer、StringBuilder、BigDecimal、Date类、Calender类的学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习java的第二十五天,StringBuffer、StringBuilder、BigDecimal、Date类、Calender类的学习

一、StringBuffer、StringBuilder类的简介
  • StringBuffer :可变长字符串,JDK1.0提供,运行效率慢、线程安全
  • StringBuilder:可变长字符串,JDk5.0提供,运行效率快,线程不安全
  • 一般单线程使用StringBuilder,多线程使用StringBuffer。
  • 他们两个类的方法使用都是一样的!

使用代码测试一下,创建deme01的类

package com.ClassTest.BufferClass;

import java.util.Arrays;

public class Demo01 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();

        //1、append();追加
        sb.append("java世界第一");
        System.out.println(sb.toString());  //追加数据
        sb.append("是真的香");
        System.out.println(sb.toString());  //追加数据
        //2、insert();插入,添加
        sb.insert(0, "hello");  //插入数据,从某个地方出入
        System.out.println(sb.toString());
        //3、replace();替换
        sb.replace(0, 5, "world");  //替换数据,从哪儿开始到哪儿结束,替换成什么!
        System.out.println(sb.toString());
        //4、delete();删除
        sb.delete(0, 5);   //删除,从哪儿开始到哪儿结束
        System.out.println(sb.toString());
        //5、delete();清空
        sb.delete(0, sb.length());  //从零开始删除
        System.out.println(sb.length());

    }
}

结果图:

  • 还有一个知识点,也就是StringBuffer比String类的效率高,以及占用内存小。可以看到以下代码做对比!
package com.ClassTest.BufferClass;

public class Demo02 {
//        StringBuffer跟StringBuilder比String类快,而且使用内存较小!
public static void main(String[] args) {
    //测试
    long strat = System.currentTimeMillis(); //开始时间
    String string = "";
    for (int i = 0; i < 99999; i++) {
        string +=1;
    }
    System.out.println(string);
//    StringBuilder sb = new StringBuilder();
//    for (int i = 0; i < 99999; i++) {
//        sb.append(i);
//    }
//    System.out.println(sb.toString());
    long end = System.currentTimeMillis();  //结束时间
    System.out.println("用时:"+(end-strat));
}
}

结果图

以上打印的是使用String类字符合并输出的结果以及时间,现在使用StringBuffer或者StringBuilder类来测试
结果图:

综上,能清楚的看到对比结果,第一个String类使用的时间是3.4秒,而使用StringBuilder类的时间是0.016秒便处理出了结果!

二、BigDecimal类
  • 存放位置:java.math包中
  • 作用:精准计算浮点数!
  • 创建方式:BigDecimal bd = new BigDecimal(”1.0”);
  • 实例化BigDecimal类一定要使用字符串的类!
  • 方法:
  1. BigDecimal add(BigDecimal bd) :加
  2. BigDecimal subtract(BigDecimal bd):减
  3. BigDecimal multiply(BigDecimal bd):乘
  4. BigDecimal divide(BigDecimal bd):除
  • 除法:
  1. divide(BigDecimal bd,int scal,RoundingMode mode)
  2. 参数scal:指定精确到小数点后几位
  3. 参数mode: 指定小数部分的取舍模式,通常使用四舍五入的模式,取值为BigDecimal.ROUND_UP。

测试加减乘除!

package com.ClassTest.BigDecimal;

import java.math.BigDecimal;

public class Demo01 {
    //精准的构造类,存放在java。math包中
    //float  double  类型使用的是四进制计算,所以会丢失精度
    public static void main(String[] args) {
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println("使用deble计算:"+(d1-d2));  //输出0.099999999999998,因为在运算过程中,会丢失一定的精度

        //使用BigDecimal类来进行大的浮点数的运算

        //注意:一定要使用字符串,因为传进去的参数可能一开始就是错的!
        BigDecimal bd1 = new BigDecimal("1.0");
        BigDecimal bd2 =new BigDecimal("0.9");

        //1、减法  subtract
        BigDecimal r1 = bd1.subtract(bd2);
        System.out.println(bd1+"-"+bd2+"="+r1);

        //2、加法 add
        BigDecimal r2 = bd1.add(bd2);
        System.out.println(bd1+"+"+bd2+"="+r2);

        //3、乘法 multiply
        BigDecimal r3= bd1.multiply(bd2);
        System.out.println(bd1+"*"+bd2+"="+r3);

        //除法 divide

       BigDecimal r4 =  new BigDecimal("1.5")
               .subtract(new BigDecimal("0.5"))
                .divide(new BigDecimal("0.9"),2,BigDecimal.ROUND_UP);   //这里保留了两位小数,还提供了四舍五入的方法,也就是ROUND_UP!
        System.out.println(bd1+"/"+bd2+"="+r4);
    }
}


结果图

综上,特别需要注意的是,在进行除法运算的时候,需要进行四舍五入的运算,不然会除不尽然后出现异常,BigDecimal r4 = new BigDecimal(“1.5”).subtract(new BigDecimal(“0.5”)).divide(new BigDecimal(“0.9”),2,BigDecimal.ROUND_UP);!而且上面的属于字符串类型的数值,不能直接通过运算符进行运算,需要使用BigDecimal中的方法进行计算!

三、Date类
  • Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代了!
  • 时间单位:1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000纳秒
    代码测试Date类中的方法
package com.ClassTest.DateClass;

import java.util.Date;

public class Demo01 {
    //使用Date类测试时间
    public static void main(String[] args) {
        //今天
        Date date1 = new Date();
        System.out.println(date1.toString());  //显示的是外国人想看到的时间
        System.out.println(date1.toLocaleString()); //这个显示才是我们想要看到的时间 tolocaleString
        //昨天   date1.getTime代表从1970.1.1.00.00.00开始到当前时间的毫秒数
        Date date2 = new Date(date1.getTime()-(60*60*24*1000));  //使用今天的毫秒数减去一天的毫秒数,所以得出昨天的时间!
        System.out.println(date2.toLocaleString());

        //2、方法after之后  before之前
        boolean b1 = date1.after(date2);  //这里表示date2在date1之后,返回true
        System.out.println(b1);
        boolean b2 = date1.before(date2);  //这里表示date2在date1之前,返回false
        System.out.println(b2);

        //3、比较compareTo()
        int d = date1.compareTo(date2);  //比较的是毫秒值,返回-1或者1! 括号内是比较的值
        System.out.println(d);   //结果是1,因为date1比date2大


    }
}

以上代码中,Date类的toString方法显示的是当前时间,但是打印的是外国人设定的时间,如果想要看到我们自己喜欢的时间需要使用toLocaleString这个方法去表示!显示昨天时间使用到了gettime方法,这个是返回1970年1月1日00:00:00开始到当前的毫秒数,然后减去一天的时间,也就是60x60x24x1000,就可以得到这个时间点昨天的时间!看到after方法,是表示之后,这里返回的是布尔值。方法内是比较的内容。表示date2在date1之后,所以返回true,而before值表示之前的,这里返回的是false!而使用compareto方法,是进行比较的方法,而比较的是毫秒。方法内比较的是对象。如果方法内比外面调用值大,那么返回-1,否则返回1!

四、Calendar类
  • Calendar提供了获取或设置各种日历字段的方法
  • 构造方法:protected Calendar():由于修饰符是protected,所以无法直接创建该对象
  • 其他方法:
方法名说明
static Calendar getInstance()使用默认时区和区域获取日历
void set(int year,int month,int date,int hourofday,int minute,int second)设置日历的年、月、日、分、时、秒
int get(int field)返回给定日历字段的值。字段比如:年、月、日等
void setTime(Date date)用给定的Date设置此日历的时间。Date-Calendar
Date getTime()返回一个Date表示此日历的时间。Calendar-Date
void add(int field,int amount)按照日历规则,给指定字段添加或减少时间量
long getTimeInMillies()毫秒为单位返回该日历的时间值

创建测试类:

package com.ClassTest.CalenderClass;

import java.util.Calendar;

public class Demo01 {
    public static void main(String[] args) {
        //1、创建Calender对象
        Calendar calendar = Calendar.getInstance();  //创建一个getInstance对象 默认使用地域获取日历
        System.out.println(calendar.getTime().toLocaleString());  //显示当前时间
        System.out.println(calendar.getTimeInMillis());  //显示当前毫秒  1970年到现在的
        //2、获取时间信息
        int year = calendar.get(Calendar.YEAR);   //年
        int month = calendar.get(Calendar.MONTH); //月
        int day = calendar.get(Calendar.DAY_OF_MONTH); //日  //date也可以
        int hour = calendar.get(Calendar.HOUR_OF_DAY); //分
        int minute = calendar.get(Calendar.MINUTE);  //时
        int second = calendar.get(Calendar.SECOND);  //秒
        System.out.println("当前时间为:"+year+"年"+(month+1)+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");

        //3、修改时间
        Calendar calendar2 = Calendar.getInstance();  //重新创建对象
        calendar2.set(Calendar.DAY_OF_MONTH,25);   //将日数改成25
        System.out.println(calendar2.getTime().toLocaleString());  //打印当前时间

        //4、add修改时间
        calendar2.add(Calendar.HOUR_OF_DAY,1);  //将当前小时+1,加一个小时
        System.out.println(calendar2.getTime().toLocaleString());

        //5、补充方法
        calendar2.add(Calendar.MONTH,1);   //将当前月份加1
        int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);  //这个方法可以返回某个月的最大值 7月是31号
        int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);  //这个方法可以返回某个月的最小值  7月是1号
        System.out.println(max);
        System.out.println(min);
    }
}


结果图

综上,可以看出,可以使用对象的get方法可以获取年月日等时间,而使用set方法可以修改当前时间,将某天修改成自己想要的天数!如果超过当前月的最大天数,则往前加!使用add方法也可以修改时间,可以往前或者往后减!后面还有一个补充方法,也就是getActualMinimum最小天数跟getActualMaximum最大天数!可以返回某个月的最大天数跟最小天数!


注:文章仅做个人学习日记,不做学习建议,学习来源:千峰教育

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992645.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号