Java基础第二遍-15-常用对象2

常用对象

StringBuffer(线程安全,做了线程同步)

介绍

  1. 字符串的组成原理就是通过该类实现的
  2. StringBuffer可以对字符串内容进行增删
  3. StringBuffer是一个容器(字符串缓冲区)
  4. 很多方法于String相同
  5. StringBuffer是可变长度(初始默认长度为16个字符,超过的也可以存储)

基本操作

  1. 添加,可以是任意类型的数据,byte和short可以自动转型为int

    image-20211110213843799

  2. 插入

    image-20211110215931632

  3. 删除

    image-20211110215951400

  4. 修改

  5. package com.bixiangdong.api;
    
    public class StringBuffer1 {
        public static void main(String[] args) {
            testAppend();
            testInsert();
            testReplace();
            testDelete();
        }
        public static void testAppend(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行添加方法
            sb.append(3);
            sb.append("fdsa");
            System.out.println(sb);
        }
        public static void testInsert(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行插入
            sb.append("3fdsafd");
    
            sb.insert(1,"fdsa");//从插入到下标为1的地方
            System.out.println(sb);
        }
        public static void testDelete(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行删除方法
            sb.append("fdsafsda");
            sb.delete(1,3);//包含头不包含尾
            //清空
            sb=new StringBuffer();
            sb.delete(0,sb.length());
    
            System.out.println(sb);
        }
        public static void testReplace(){
            //创建缓冲区对象
            StringBuffer sb = new StringBuffer();
            //执行替换方法
            sb.append("fdsafdsa");
            sb.replace(1,3,"fdsafds");//替换一个区域
            sb.setCharAt(1,'d');//替换单个位置
            System.out.println(sb);
        }
    }
    
    

StringBuilder(线程不安全,没有做同步)

  1. 不保证同步,线程不安全

  2. 功能于StringBuffer一模一样

  3. 因为是线程不同步的,不需要判断锁,那么其执行速度一定比StringBuffer快

  4. //模拟StringBuffer添加同步
    class StringBuffer{
        Object lock;
        public StringBuffer append(int x){
            synchronized (lock){
                
            }
            return null;
        }
        public StringBuffer delete(int x){
            synchronized (lock){
    
            }
            return null;
        }
    }
    

练习

  1. 下面哪种方式好?
  2. 使用StringBuilder要更好一些,因为是同一个对象可变长操作,而String操作的话就会在String常量池中产生很多字符串,很浪费空间
package com.bixiangdong.api;

public class Demo03 {
    public static void main(String[] args) {
        char[] arr = {'a','j','y','g','s','f','3'};
        System.out.println(transString(arr));
        System.out.println(transString1(arr));
    }
    //将字符数组转换为字符串-StringBuilder
    static String transString(char[] arr){
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
        }
        sb.append("]");
        return sb.toString();
    }
    //将字符数组转换为字符串-String
    static String transString1(char[] arr){
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            str=str+arr[i];
        }
        str=str+"]";
        return str;
    }
}

System类

  1. err //标准错误流
  2. in //标准输入流
  3. out //标准输出流
  4. currentTimeMillis(); //返回当前时间毫秒值
  5. getProperties(); //获取当前系统属性,返回一个properties集合
  6. setProperty(); //给系统设置一些属性,是全局的,其他的程序也可以获取到

Runtime类

  1. 没有构造方法摘要,说明不能创建对象
  2. 单例设计模式

Math类

  1. ceil();//返回大于参数的最小整数
  2. floor();//返回小于参数的最大整数
  3. round();//返回四舍五入的整数
  4. pow(a,b);//a的b次幂
  5. random();//返回一个double随机数(伪随机,具有一定规律)

Date类

  1. setTime();//设置毫秒值
  2. getTime();//获取毫秒值
  3. 毫秒值的作用,用于时间运算

DateFormat日期格式转换

  1. 对日期进行格式化

    //DateFormat提供的默认的日期实例
            DateFormat dateInstance = DateFormat.getDateInstance();
            DateFormat dateInstance2 = DateFormat.getDateInstance(DateFormat.FULL);
            //DateFormat的子类-自定义日期风格
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    
  2. 字符串转换为日期对象

    //DateFormat的子类-自定义日期风格
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            String str = "2021--10--10";
            Date parse = dateFormat.parse(str);
    
  3. 练习

    package com.bixiangdong.api;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    //练习:计算两个时间之间相差多少天
    public class Demo04 {
        public static void main(String[] args) throws ParseException {
            String str1="2021-10-10";
            String str2="2021-10-11";
            //像将其转为日期对象
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            Date parse = simpleDateFormat.parse(str1);
            Date parse1 = simpleDateFormat.parse(str2);
            //获取其毫秒值
            long time = parse.getTime();
            long time1 = parse1.getTime();
            //计算两毫秒值的差值
            long x = time-time1;
            //计算多少天
            int day = getDay(x);
            System.out.println(day);
        }
    
        public static int getDay(long x) {
            return (int)(Math.abs(x)/1000/60/24/60);
        }
    }
    
    

Calendar类

  1. 练习:打印一个年的2月的最后一天

    
    public class Demo05 {
        public static void main(String[] args) {
            DateFormat dateInstance = DateFormat.getDateInstance();
            System.out.println(dateInstance.format(get2LastDay(2021)));
        }
    
        public static Date get2LastDay(int year) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(year,2,1);
            //将月向前偏移一天,就是2月的最后一天
            calendar.add(Calendar.DAY_OF_MONTH,-1);
            return calendar.getTime();
        }
    }
    
    
posted @ 2021-11-14 15:14  争取做百分之一  阅读(29)  评论(0)    收藏  举报