常用类学习(String、时间、日历、Math)

String、StringBuffer和StringBuilder

StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都会引发新的String对象的生成;StringBuffer和StringBuilder则是可变类,任何对它所指代的字符串的改变都不会产生新的对象
String不可变的原因
源码:

private final char value[];

因为使用了final关键字,导致value数组只能赋一次值
而StringBuffer、StringBuilder源码都没有使用final关键字,所以可以对数组进行扩容

String内存分析

String s1 = "abc";
String s2 = "a"+"b"+"c";//字符串拼接,会进行编译期优化,直接拼成最终你要的字符串
String s3 = "abc"+"";
String s4 = s1+"";//变量参与运算,就会在堆中开辟空间
String s5 = new String("abc");

System.out.println(s1==s2);//true
System.out.println(s1==s3);//true
System.out.println(s1==s4);//false
System.out.println(s1==s5);//false

StringBuilder有增删查改的方法

String str = "abc";//不可变字符串
StringBuilder sb = new StringBuilder();//可变字符串,默认数组长度16
StringBuilder sb2 = new StringBuilder(23);//长度改为23
StringBuilder sb3 = new StringBuilder("abc");//初始化为abc
sb3.append("kkk");//值变为abckkk

StringBuilder效率高,线程不安全

StringBuffer效率低,线程安全(底层使用了synchronized)

模拟ArrayList

public class test1 {
    
    
    //值
    Object[] value;
    //数组被占用的个数
    int count;

    //无参构造器
    public test1(){
    
    
        this(3);
    }
    //有参构造器
    public test1(int num){
    
    
        value = new Object[num];
    }

    public void add(Object obj){
    
    
        value[count] = obj;
        count++;
        //数组的扩容
        if (count>value.length-1){
    
    
            //创建一个新数组
            Object[] newobj = new Object[(value.length<<1)+2];//等价于value.length*2+2
            //将原来数组的东西复制到新数组里
            for (int i = 0; i < value.length; i++) {
    
    
                newobj[i] = value[i];
            }
            //将value指向newobj
            value = newobj;
        }
    }
    public Object get(int index){
    
    
        return value[index];
    }

    public int getCount(){
    
    
        return count;
    }


    public String toString() {
    
    
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < count; i++) {
    
    
            sb.append(value[i]+",");
        }
        sb.setCharAt(sb.length()-1,']');
        return sb.toString();
    }

    public static void main(String[] args) {
    
    
        test1 ts = new test1();
        ts.add("as");
        ts.add(new Student("ms",12));
        ts.add(12);

        ts.add(2);

        for (int i = 0; i < ts.getCount(); i++) {
    
    
            System.out.println(ts.get(i));
        }
        System.out.println(ts);
        System.out.println(ts.toString());

    }

}

输出结果

在这里插入图片描述

时间处理类

public class test2 {
    
    
    public static void main(String[] args) {
    
    
        //java.util.Date
        Date d = new Date();
        System.out.println(d);
        System.out.println(d.getTime());//返回自1970年1月1日以来,由 Date对象表示的00:00:00 GMT的毫秒 数
        System.out.println(System.currentTimeMillis());//等价于d.getTime(),常用,因为不用创建对象,直接调用

        //java.sql.Date
        //java.sql.Date:年月日
        //java.util.Date:年月日 时分秒
        java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
        System.out.println(sqlDate);

        //将String转换为java.sql.Date
        java.sql.Date valueOf = java.sql.Date.valueOf("2020-1-2");
        System.out.println(valueOf);

        //java.sql.Date和java.util.Date相互转换 java.sql.Date是java.util.Date的子类
        //java.sql.Date转换为java.util.Date
        Date date = sqlDate;
        System.out.println(date);
        //java.util.Date转换为java.sql.Date
        java.sql.Date sqlDate2 = new java.sql.Date(new Date().getTime());
        System.out.println(sqlDate2);
        
    }
}

输出结果

在这里插入图片描述

java.sql.Date是java.util.Date的子类

在这里插入图片描述

日期格式化

在这里插入图片描述

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

public class test2 {
    
    
    public static void main(String[] args) {
    
    
        //String转换为Date:局限:字符串格式必须是年-月-日
      /*  java.sql.Date valueOf = java.sql.Date.valueOf("2020-1-1");
        Date date = valueOf;
      */

        //日期格式化类:JDK帮助文档
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");

        try {
    
    
            //String转换为Date
            Date d = df.parse("2020-1-1 12-23-55");
            System.out.println(d);
        } catch (ParseException e) {
    
    
            e.printStackTrace();
        }
        //Date转换为String
        String str = df.format(new Date());
        System.out.println(str);
        

    }
}

输出结果

在这里插入图片描述

Calendar(日历)

import java.util.Date;
import java.util.Calendar;
public class test {
    
    
    public static void main(String[] args) {
    
    
        //创建一个日历
        Calendar cal = Calendar.getInstance();
        //常用方法
        //读取
        System.out.println(cal.get(Calendar.YEAR));// 年
        System.out.println(cal.get(Calendar.MONTH));// 月:当前月-1
        System.out.println(cal.get(Calendar.DATE));// 日
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));// 周几:周+1
        System.out.println("=============");
        //设置
        cal.set(Calendar.YEAR,2020);
        cal.set(Calendar.DATE,16);

        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.DATE));
        System.out.println("=============");
        //String转换为Calendar
        //String转换为Date
        String str = "2019-5-5";
        Date valueOf = java.sql.Date.valueOf(str);
        //Date转换为Calendar
        cal.setTime(valueOf);
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH));
        System.out.println(cal.get(Calendar.DATE));

    }
}

输出结果

在这里插入图片描述

日历

import java.sql.Date;
import java.util.Calendar;
import java.util.Scanner;

public class test {
    
    

    public static void main(String[] args) {
    
    
        System.out.println("请输入你想要查看的日期--(格式例如:2016-10-21):");
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        //String转换为Calendar
        Date date = Date.valueOf(str);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        System.out.println("日\t一\t二\t三\t四\t五\t六");
        //求出这个月中的最大天数
        int maxDay = cal.getActualMaximum(Calendar.DATE);
        int nowDay = cal.get(Calendar.DATE);
        //将当前日期变为本月的第一天
        cal.set(Calendar.DATE,1);
        //获取本月的第一天是星期几
        int num = cal.get(Calendar.DAY_OF_WEEK);
        // \t的个数为num-1
        int count = num-1;
        for (int i = 0; i < count; i++) {
    
    
            System.out.print("\t");
        }
        for (int i = 1; i <= maxDay; i++) {
    
    
            if (i != nowDay){
    
    
                System.out.print(i + "\t");
            }else{
    
    
                System.out.print(i + "*\t");
            }
            count++;
            if (count % 7 == 0){
    
    
                System.out.println();
            }

        }

    }
}

结果(输入了2021-1-9)

在这里插入图片描述

Math

//圆周率
System.out.println(Math.PI);
//次方
System.out.println(Math.pow(3,3));//3的3次方
//开平方
System.out.println(Math.sqrt(9));
//向上取值
System.out.println(Math.ceil(9.1));//10.0
//向下取值
System.out.println(Math.floor(9.1));//9.0
//四舍五入
System.out.println(Math.round(5.4));
//随机数 0到1 左闭右开
System.out.println(Math.random());
//绝对值
System.out.println(Math.abs(-9.8));
//取最小值
System.out.println(Math.min(3.3,6.6));
//取最大值
System.out.println(Math.max(3.3,6.6));

随机数

Random r=new Random();
for (int i = 0; i < 10; i++) {
    
    
    System.out.println(r.nextInt(10));//[0,10),生成0到10的随机数
}

Guess you like

Origin blog.csdn.net/qq_45598422/article/details/120644757