java学习之旅(day.14)

可变字符串

StringBuffer:可变长字符串,运行效率慢,线程安全

StringBuilder:可变长字符串,运行效率快,线程不安全

package com.zhang.lei;
//StringBuffer和StringBuilder的使用:和String相比,效率更高,更节省内存
public class Demo05 {
    public static void main(String[] args) {
        StringBuffer sb=new StringBuffer();
        //append() 追加
        sb.append("java牛逼");
        System.out.println(sb.toString());//java牛逼
        sb.append("java真难");
        System.out.println(sb.toString());//java牛逼java真难
        //insert() 添加或插入,某个位置处添加或插入
        sb.insert(0,"傻逼");
        System.out.println(sb.toString());//傻逼java牛逼java真难
        //replace,String的replace仅可以替换旧的字符串,而此处的可以指定位置
        sb.replace(2,4,"hello");//2-4 含头(2)不含尾(4),0
        System.out.println(sb.toString());//傻逼hellova牛逼java真难
        //delete() 含头不含尾
        sb.delete(2,4);
        System.out.println(sb.toString());//傻逼llova牛逼java真难
    }
}
==========================================================================================================
    package com.zhang.lei;
//验证StringBuilder比String的效率高
public class Demo06 {
    public static void main(String[] args) {
        //开始时间
        long start=System.currentTimeMillis();
        String string="";
        for (int i = 0; i < 99999; i++) {
            string+=i;//字符串拼接
        }
        System.out.println(string);//0123.....999998
        //结束时间
        long end=System.currentTimeMillis();
        System.out.println("用时:"+(end-start));//用时:37637
        //看看StringBuilder的时间
        long start1=System.currentTimeMillis();
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i < 999999; i++) {
            sb.append(i);
        }
        System.out.println(sb.toString());
        long end1=System.currentTimeMillis();
        System.out.println("用时:"+(end1-start1));//用时:180
    }
}

BigDecimal

引例:

package com.zhang.lei;

public class Demo07 {
    public static void main(String[] args) {
        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
        //原因就出在double上,double或float类型的存储时一个近似值,所以在精度要求高的情况下double不再符合要求,此时需借助BigDecimal
        
    }
}

BigDecimal

  • 位置:java.amth包中
  • 作用:精确计算浮点数
  • 创建方式:BigDecimal bd =new BigDecimal();
package com.zhang.lei;

import java.math.BigDecimal;

public class Demo07 {
    public static void main(String[] args) {
        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
        //原因就出在double上,double或float类型的存储时一个近似值,所以在精度要求高的情况下double不再符合要求,此时需借助BigDecimal
        //BigDecimal 浮点数精确计算
        BigDecimal bd1=new BigDecimal("1.0");
        BigDecimal bd2=new BigDecimal("0.9");
        //此时类就无法再做加减运算了  bd1-bd2会报错
        //要用方法subtract() 减法
        BigDecimal r1=bd1.subtract(bd2);
        System.out.println(r1);//0.1
        //add 加法
        BigDecimal r2=bd1.add(bd2);
        System.out.println(r2);//1.9
        //multiply 乘法
        BigDecimal r3=bd1.multiply(bd2);
        System.out.println(r3);//0.90
        //divide 除法
        BigDecimal r4=new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"));
        System.out.println(r4);//1
        //当上面方法除不尽时,会报异常:ArithmeticException:
        //BigDecimal r5=new BigDecimal("10").divide(new BigDecimal("3"));
        BigDecimal r5=new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);//ROUND_HALF_UP 四舍五入   2是指保留2位小数
        System.out.println(r5);//3.33
    }
}

14

141

Date类

Date表示特定的瞬间,精确到毫秒。Date类中大部分方法都已被Calendar类中的方法取代

时间单位:秒 毫秒 微秒 纳秒 之间的转化为1000

package com.zhang.lei;

import java.util.Date;

public class Demo08 {
    public static void main(String[] args) {
        //创建Date对象并实例化
        Date date1=new Date();
        //今天的时间
        System.out.println(date1.toString());//Thu Jan 14 14:21:19 CST 2021 打印当前时间
        System.out.println(date1.toLocaleString());//2021-1-14 14:22:44也是打印当前时间,但已经过时了
        //昨天的时间
        //今天的时间减去一天的毫秒数,getTime返回的是从1970年1月1日到现在的毫秒数
        Date date2=new Date(date1.getTime()-60*60*24*1000);
        System.out.println(date2.toString());//Wed Jan 13 14:26:17 CST 2021
        //after before
        boolean b1=date1.after(date2);//今天在昨天之后
        boolean b2=date1.before(date2);//今天在昨天之前
        System.out.println(b1);//true
        System.out.println(b2);//false
        //compareTo 比较2个日期的顺序  前大于后,输出1,反之为-1,相等为0
        int d=date2.compareTo(date1);//-1
        int d1=date1.compareTo(date2);//1
        int d2=date2.compareTo(date2);//0
        System.out.println(d);
        System.out.println(d1);
        System.out.println(d2);
        //equals  比较是否相等
        boolean e=date1.equals(date2);
        System.out.println(e);//false

    }
}

Calendar类

1411

package com.zhang.lei;

import java.util.Calendar;

public class Demo09 {
    public static void main(String[] args) {
        //创建一个Calendar对象,无法用new
        Calendar calendar=Calendar.getInstance();
        //System.out.println(calendar.toString());不能用这种方法输出
        System.out.println(calendar.getTime().toLocaleString());//2021-1-14 19:55:00
        System.out.println(calendar.getTimeInMillis());//1610625436701  打印毫秒值
        //获取时间信息(年月日时分秒)
        //获取年
        int year=calendar.get(Calendar.YEAR);
        //获取月(老外的月从0开始的,1-12月对应为0-11月)
        int month=calendar.get(Calendar.MONTH);
        //日
        int day=calendar.get(Calendar.DAY_OF_MONTH);//或用Date
        //小时
        int hour=calendar.get(Calendar.HOUR_OF_DAY);//HOUR 12小时的 HOUR_OF_DAY 24小时的
        //分钟
        int minute=calendar.get(Calendar.MINUTE);
        //秒
        int second=calendar.get(Calendar.SECOND);
        System.out.println(year+"年"+month+1+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");
        //2021年01月14日20时11分18秒
        //修改时间
        Calendar calendar2 =calendar.getInstance();//获取时间
        calendar2.set(Calendar.DAY_OF_MONTH,5);//设置时间
        System.out.println(calendar2.getTime().toString());//Tue Jan 05 20:28:18 CST 2021
        //add方法修改时间
        calendar2.add(Calendar.HOUR,1);
        System.out.println(calendar2.getTime().toLocaleString());//2021-1-5 21:31:35  加了1小时,减1小时的话:-1
        int max=calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);//或取当前时间的最大值
        int min=calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);//或取当前时间的最小值
        System.out.println(max);//31
        System.out.println(min);//1
    }
}

SimpleDateFormat

14111

package com.zhang.lei;

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

public class Demo10 {
    public static void main(String[] args) throws Exception {
        //创建 SimpleDateFormat对象    y 年  M月
        //SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd/HH-mm-ss");///和-可以换。换成汉字也可
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
        //创建Date
        Date date=new Date();
        //格式化date(把日期转换成字符串)
        String str=sdf.format(date);
        System.out.println(str);//2021/01/14
        //解析(把字符串转成日期)
        Date date2=sdf.parse("1990/05/01"); //给的时间和上面格式不一样的话会报错,要在上面抛出异常
        System.out.println(date2);//Tue May 01 00:00:00 CDT 1990
    }
}

System类

System系统类主要用于获取系统的属性数据和其他操作,构造方法是私有的,

所以用的时候不需要创建对象,其属性和方法都是静态的,可直接System. 就可

System中的一些方法

141111

package com.zhang.lei.D;

import com.zhang.lei.Student;

public class Demo11 {
    public static void main(String[] args) {
       //arraycopy  实现数组的复制
        int[] arr={20,18,15,8,35,26,45,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]);

        }
        //Arrays.copyOf();差不多
        //打印从1970年到现在过去的毫秒数
        System.out.println(System.currentTimeMillis());//1610635924109
        //这个方法可以实现计时,如计算代码的执行时间
        long start=System.currentTimeMillis();//获取时间
        for (int i = 0; i < 999999; i++) {
            for (int j= 0; j<999999; j++) {
                int result=i+j;
            }
        }
        long end=System.currentTimeMillis();
        System.out.println("用时:"+(end-start));//12毫秒
        //System.gc();告诉垃圾回收器,你要回收垃圾了
        //这个例子需要额外建个类:Student1
        Student s1=new Student("aaa",19);
        new Student("aaa",19);
        Student s2=new Student("bbb",19);
        new Student("bbb",19);
        Student s3=new Student("ccc",19);
        new Student("ccc",19);
        System.gc();
        //退出JVM
        System.exit(0);//非0就是非正常退出
        System.out.println("程序结束了");//这句未执行,因为上一行代码就让JVM退出了
    }
}
=======================================================
      package com.zhang.lei.D;
public class Student1 {
    private String name;
    private int age;
    //添加构造方法


    public Student1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student1() {
    }

    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 "Student1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("回收了"+name+""+"   "+age);
    }
}
posted on 2021-01-14 23:55  懵逼的程序小白  阅读(61)  评论(0)    收藏  举报