天天看點

不是太細的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)