Day10

Java学习

StringBuffer和StringBuilder

  1. StringBuffer

    • 可变长字符串,JDK1.0提供,运行效率慢、线程安全
  2. StringBuilder

    • 可变长字符串,JDK5.0提供,运行效率快,线程不安全
public class Demo05 {
    //StringBuffer和StringBuilder
    //比String快、节省内存

    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        //StringBuilder sb = new StringBuilder();//和StringBuffer结果一样

        //append();追加
        sb.append("java,");
        System.out.println(sb.toString());
        sb.append("C++");
        System.out.println(sb.toString());

        //insert();添加
        sb.insert(0,"天下第一语言:");
        System.out.println(sb.toString());

        //replace();替换
        sb.replace(7,11,"Java");//不包括end
        System.out.println(sb.toString());

        //delete();删除
        sb.delete(11,15);//下标
        System.out.println(sb.toString());

        //reverse();逆置
        sb.reverse();
        System.out.println(sb.toString());
    }
}

public class Demo06 {
    //StringBuilder比StringBuffer效率高
    public static void main(String[] args) {
        //开始时间
        long start = System.currentTimeMillis();
//        String str = "";
//        for (int i = 0; i < 99999; i++) {
//            str += i;
//        }
//        System.out.println(str);//用时:55778

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 99999; i++) {
            sb.append(i);
        }//用时:7
        long end = System.currentTimeMillis();
        System.out.println("用时:"+(end-start));
    }

}

BigDecimal

  • 精确计算浮点数
public class Demo07 {
    public static void main(String[] args) {
        //double存的是近似值
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println(d1-d2);//0.09999999999999998

        //面试题
        double result = (1.4 - 0.5)/0.9;
        System.out.println(result);//0.9999999999999999

        //BigDecimal,大浮点数精确计算
        //本身1.0和0.9就是不精确的,所以用字符串传值
        BigDecimal b1 = new BigDecimal("1.0");
        BigDecimal b2 = new BigDecimal("0.9");

        //运算用方法
        BigDecimal ret = b1.subtract(b2);//减法
        System.out.println(ret);//0.1

        //加法
        BigDecimal add = b1.add(b2);
        System.out.println(add);

        //乘法
        BigDecimal multiply = b1.multiply(b2);
        System.out.println(multiply);

        //除法
        BigDecimal divide = b1.divide(b2,3,BigDecimal.ROUND_HALF_UP);//除不尽,保留三位小数,并四舍五入
        //scale:精确到小数点后几位
        //ROUND_HALF_UP:小数部分四舍五入
        System.out.println(divide);
    }
}

Data

  • Data表示特定的瞬间,精确到毫秒。Data类中的大部分方法都已经被Calendar类中的方法所取代。
  • 时间单位
    • 1秒=1000毫秒
    • 1毫秒=1000微秒
    • 1微妙=1000纳秒
import  java.util.Date;
public class Demo08 {
    public static void main(String[] args) {
        //1.创建Data对象
        //今天
        Date date = new Date();
        System.out.println(date.toString());//Thu Jan 28 15:28:13 CST 2021
        System.out.println(date.toLocaleString());//2021-1-28 15:28:13

        //昨天
        Date d1 = new Date(date.getTime()-(60*60*24*1000));//一天有多少毫秒
        System.out.println(d1.toLocaleString());

        //after和before
        boolean b1 = date.after(d1);//true,今天在昨天之后
        boolean b2 = date.before(d1);//false,今天不再昨天之前
        System.out.println(b1);
        System.out.println(b2);

        //compareTO();比较
        int result = date.compareTo(d1);//1,结果不是差,而是正数或负数
        System.out.println(result);

        //equals();
        boolean b = date.equals(d1);
        System.out.println(b);//false
    }

Calendar

  • Calendar提供了获取或设置各种日历字段的方法
  • 构造方法
    • protected Calendar():由于修饰符是protected,所以无法直接创建对象。
import java.util.Calendar;

public class Demo09 {
    public static void main(String[] args) {
        //1.创建Calendar对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getTime().toLocaleString());//2021-1-28 15:44:50
        System.out.println(calendar.getTimeInMillis());//1970到现在的毫秒值

        //获取时间信息
        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);//24小时制,HOUR12小时制
        int second = calendar.get(calendar.SECOND);
        System.out.println(year+"年"+month+"月"+day+"日"+hour+":"+second);//月是从0~11

        //修改时间
        Calendar c2 = Calendar.getInstance();
        c2.set(Calendar.DAY_OF_MONTH,13);
        System.out.println(c2.getTime().toLocaleString());

        //add();
        c2.add(Calendar.HOUR,-1);
        System.out.println(c2.getTime().toLocaleString());

        //获取月的最大最小值
        int max = c2.getActualMaximum(Calendar.DAY_OF_MONTH);
        int min = c2.getActualMinimum(Calendar.DAY_OF_MONTH);

        System.out.println(max);
        System.out.println(min);
    }

SimpleDateFormat类

  • SimpleDateFormat是一个以语言环境有关的方式来格式化和解析日期的具体类
  • 格式化(日期->文本),解析(文本->日期)
  • 常用时间模式字母
字母日期或时间
y
M年中月份
d月中天数
H1天中小时数(0-23)
m分钟
s
S毫秒
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo10 {
    public static void main(String[] args) {
        //创建SimpleDateFormat对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//格式,分割符自己定义,但字母必须按照这种写
        //创建Date
        Date date = new Date();
        //格式化,把日期转字符串
        String str = sdf.format(date);
        System.out.println(str);

        //解析,把字符串转日期
        Date parse = null;
        try {
            parse = sdf.parse("2000年00月00日 00:00:00");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Date d2 = parse;//
        System.out.println(d2);

    }
}

System类

  • 获取系统的属性数据和其他操作,直接调用
import java.util.Arrays;

public class Demo11 {
    public static void main(String[] args) {
        //arraycopy:数组复制

        //src:原数组
        //srcPos:从哪里开始复制
        //dest:目标数组
        //destPos:目标数组的位置
        //length:复制长度

        int[] arr = {1,2,3,4,5,6,7,8};
        int[] dest = new int[8];
        System.arraycopy(arr,4,dest,4,4);
        for (int i : dest) {
            System.out.println(i);
        }
        //Arrays.copyOf()用的是System.arraycopy();、
        //System.arraycopy()用的JVM,效率高

        //计时
        long start = System.currentTimeMillis();
        for (int i = 0; i < 9999; i++) {
            for (int i1 = 0; i1 < 9999; i1++) {
                int result = i + i1;
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("用时"+(end-start));

        //System.gc();回收垃圾
        new Person("a",1);
        new Person("b",1);
        new Person("c",1);
        System.gc();//创建了三个对象却没有任何引用,一创建就是垃圾

        //退出
        System.exit(0);//0正常退出,其他是异常退出
        System.out.println("123");//已退出了,无法打印

    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值