天天看点

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

这次把跟着视频敲的一点点代码放到了github上(使用idea):

里面有java的代码和awt的代码

目录:

Table of Contents

3.String类

   String常用方法:

String和基本数据类型,包装类的转换

4.StringBuffer和StringBuilder

1.和String的区别:

2.StringBuffer

5.时间API

JDK8.0之前的API

SimpleDateFormat:写一定格式的时间

 Calender类

JDK8中的新时间API

java.time

instant

 DateTimeFormatter

3.String类

String是一个final类,代表不可变的字符序列,无法继承!

String实现了Serializable接口,表示字符串是支持序列化的。

String实现了Comparable接口,可以比较大小

String.intern()强制把返回值在常量池中生成。

一个例题:

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

   String常用方法:

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

System.out.println(s3.compareTo(s4));//用于比较字符串大小(通过ascii比较),大于的为正,小于为负,相等为0,常用于排序(例如通讯录)

String和基本数据类型,包装类的转换

String-->基本数据类型|包装类:使用静态方法:parseXxx(str)

基本数据类型|包装类:使用静态方法-->String:调用String重载的valueOf(xxx)

String-->char[]:String.toCharArray()

char[]-->String:调用String构造器

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

String-->byte[]:调用String的getBytes()

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

byte[]-->String:

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

小练习代码:

package com.lzy.stringlearn;

import org.junit.Test;

/**
 * @author: lzy
 * @description: String学习
 * @date: 2020-09-05-21:25
 */
public class StringTest {

    public  void change(String str){
        str="just so so";
    }
    public String change1(String str){
        str="just so so 1";
        return str;
    }

    @Test
    public void test1(){
        String s1="hello world";
        String s2=new String("good");
        s2="bad";
        s1="world hello";
        System.out.println(s1);
        System.out.println(s2);
        change(s2);
        System.out.println(s2);//bad
        String s3=change1(s2);
        System.out.println(s3);//just so so 1
        System.out.println(s3==s2);//false
    }
    
}
           

4.StringBuffer和StringBuilder

1.和String的区别:

String不可变,使用char[]数组

StringBuffer:可变,线程安全,效率低,多线程用。使用char[]数组存储

StringBuilder:可变,线程不安全,效率高,jdk5.0新增,使用char[]数组存储

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

2.StringBuffer

StringBuffer默认为有16位的char[]数组,当然char[]长度和StringBuffer.length()是完全不一样的。如果StringBuffer需要扩容,底层会扩容成原来的两倍+2。

所以开发中建议使用:StringBuffer中的StringBuffer(int)构造器,直接确认String长度。

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

substring:返回一个从start开始到end索引结束的左臂右开区间的子字符串

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

小练习代码:

package com.lzy.stringlearn;

import org.junit.Test;

/**
 * @author: lzy
 * @description: compare String StringBuffer and StringBuilder
 * @date: 2020-09-06-11:31
 */
public class StringBufferBuilderTest {

    @Test
    public void test()
    {
        StringBuffer sb1=new StringBuffer("abc");
        sb1.setCharAt(0,'m');//这个会直接改变String
        System.out.println(sb1);
    }

}
           

5.时间API

JDK8.0之前的API

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

可以生成一个时间戳

  2.其他常用的构造器和方法:

package com.lzy.datalearn;

import org.junit.Test;

import java.util.Date;

/**
 * @author: lzy
 * @description: 日期相关api测试
 * @date: 2020-09-07-7:58
 */
public class DataTimeTest {
    /*java.util.Date类
    *       |--java.sql.Date类
    *
    * 1.两个构造器的使用
    *       构造器1:Date() 创建一个对应当前时间的Date对象
    *       构造器2:创建指定毫秒数的Date对象
    * 2.两个方法的使用欧冠
    *       toString():显示当前年月日
    *       getTime():获取当前date时间戳
    * 3.java.sql.Date对应数据库中的日期类型对象
    *       》如何实例化
    *       》把util.Date对象转换成java.sql.Date对象
    * */
    @Test
    public void test1(){
        //构造器1:Date() 创建一个对应当前时间的Date对象
        Date date = new Date();
        System.out.println(date.toString());
        System.out.println(date.getTime());
        //构造器2:创建指定毫秒数的Date对象
        Date date2=new Date(123123421342135L);
        System.out.println(date2.toString());
        //创建java.sql.Date对象
        java.sql.Date date3=new java.sql.Date(128397541092537L);
        System.out.println(date3);// 6038-10-0
        //转换
        //情况1:多态
        Date date4=new java.sql.Date(234789L);
        java.sql.Date date5=(java.sql.Date) date4;
        //情况2:
        Date date6=new Date();
        //java.sql.Date date7=(java.sql.Date)date6;new一个父类不能强制转换成子类
        java.sql.Date date7=new java.sql.Date(date6.getTime());
    }
}
           

SimpleDateFormat:写一定格式的时间

调用SimpleDateFormat构造器可以直接生成对应格式的时间:

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

例如:

package com.lzy.datalearn;

import org.junit.Test;

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

/**
 * @author: lzy
 * @description:
 * @date: 2020-09-07-9:28
 */
public class DateTimeTest1 {
    //SimpleDateFormat对日期Date类的格式化和解析
    //SimpleDateFormat实例化
    @Test
    public void test() throws ParseException {
        //实例化
        SimpleDateFormat sdf = new SimpleDateFormat();
        //格式化:日期->字符串
        Date date = new Date();
        String format=sdf.format(date);
        System.out.println(format);
        //解析:字符串->日期
        String str="20-9-7 上午9:33";
        Date date1=sdf.parse(str);
        System.out.println(date1);
        //指定格式的日期:通过带参数的构造器
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //格式化
        String format1=sdf1.format(date);
        System.out.println(format1);
        //解析
        Date date2=sdf1.parse("2020-09-07 09:41:25");
        System.out.println(date1);
    }
}
           
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

如何把一定格式时间转换成sql使用的时间举例:

//把指定格式的字符串转换成java.sql./Date格式
    @Test
    public void test1() throws ParseException {
        String d="2020-09-07";
        //首先需要使用到SimpleDateFormat对象,使用带参数的构造器
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        //解析这个时间并且把它赋值给一个Date类型对象
        Date date=sdf.parse(d);
        //然后把这个Date类型转换成java.sql.Date类型,需要使用getTime()
        java.sql.Date date1=new java.sql.Date(date.getTime());
        System.out.println("***************************");
        System.out.println(date1);
    }
           

 Calender类

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

JDK8中的新时间API

java.time

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

此时是localDate是不可变的。修改后需要新的对象承接。

instant

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

 DateTimeFormatter

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

这个类似于SimpleDateFormat

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)
不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)

自定义方式用的更多:

不是太细的java自学笔记进阶篇2(p447-p469)(String,StringBuffer,StringBuilder,DateAPI,jdk8中新的时间API)