1. 程式人生 > >Java常用API-Date-DateFormat-Calendar-System-Scanner-String-StringBuilder及使用

Java常用API-Date-DateFormat-Calendar-System-Scanner-String-StringBuilder及使用

Java常用API

  • Date
  • DateFormat
  • Calendar
  • System
  • Scanner
  • String
  • StringBUilde

API:應用程式程式設計介面

Date類

Date 表示特定的瞬間,精確到毫秒。

 /*建構函式*/

 //分配 Date 物件並初始化此物件,以表示分配它的時間(精確到毫秒)。 
 public Date();
 
 //分配 Date 物件並初始化此物件,以表示自從標準基準時間(稱為“曆元 (epoch)”,
 即 1970 年 1 月 1 日 00:00:00 GMT)以來的指定毫秒數。
 public Date(long date);

示例程式碼:

/**
 * Date
 */
public class Date {
    public static void main(String[] args) {
        //建立物件
        java.util.Date date = new java.util.Date();
        System.out.println("時間1"+date);

        java.util.Date date2 = new java.util.Date(1000*60*60);
        System.out.println("時間2"+date2);

        //輸出:時間1Wed Dec 19 12:59:25 CST 2018
        //輸出:時間2Thu Jan 01 09:00:00 CST 1970
    }
}
   /*成員方法*/
   public long getTime()
   public void setTime(long time)

示例程式碼:

/**
 * Date
 */
public class Date {
    public static void main(String[] args) {
        //建立物件
        java.util.Date date = new java.util.Date();
        System.out.println("時間1:"+(Long)date.getTime());

        java.util.Date date2 = new java.util.Date();
        date2.setTime(1000);//設定時間
        System.out.println("時間2:"+date2);

        //輸出:時間1:1545197445870
        //輸出:時間2:Thu Jan 01 08:00:01 CST 1970
    }
}

DateFormat抽象類

DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並分析日期或時間。日期/時間格式化子類(如 SimpleDateFormat)允許進行格式化(也就是日期 -> 文字)、分析(文字-> 日期)和標準化。將日期表示為 Date 物件,或者表示為從 GMT(格林尼治標準時間)1970 年,1 月 1 日 00:00:00 這一刻開始的毫秒數。
DateFormat作用:即可以將一個Date物件轉換為一個符合指定格式的字串,也可以將一個符合指定格式的字串轉換為一個Date物件

示例程式碼1:

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

/**
 * 將一個Date物件轉換為一個符合指定格式的字串
 * DateFormat抽象類
 */
public class DateFormat {
    public static void main(String[] args) {
        //建立日期
        Date date = new Date();
        //建立日期格式化物件
        //DateFormat不能建立物件,因此由其子類來建立物件
        java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        //輸出
         System.out.println("時間:"+dateFormat.format(date));
        //輸出內容:時間:時間:2018-12-19

    }
}

示例程式碼2:

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

/**
 * 將String轉換為Date物件
 * DateFormat抽象類
 */
public class DateFormat {
    public static void main(String[] args) {
        //建立日期
        String str = "2018-12-19";
        //建立日期格式化物件,
        java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = dateFormat.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //輸出
         System.out.println("時間:"+date);
        //輸出內容:時間:Wed Dec 19 00:00:00 CST 2018

    }
}

Calendar類

表示日曆的類裡面的方法基本都是靜態方法,Calendar 又是抽象類,不能new,該類將所有可能用到的時間資訊封裝為靜態成員變數,方便獲取。

示例程式碼:

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * Calendar
 */
public class TextCalendar{
    public static void main(String[] args) {
       Calendar calendar = Calendar.getInstance(); //返回當前日曆物件
        //返回當前年
        System.out.println("年"+calendar.get(Calendar.YEAR));//結果:2018
        //返回當前月,從0開始算起,最大11;0代表1月,11代表12月。
        System.out.println("月"+calendar.get(Calendar.MONTH));//結果:11
        //返回當前日,
        System.out.println("天"+calendar.get(Calendar.DATE));//結果:19
        //返回當前時
        System.out.println("時"+calendar.get(Calendar.HOUR));//結果:2
        //返回當前分
        System.out.println("分"+calendar.get(Calendar.MINUTE));//結果:14
        //返回當前秒
        System.out.println("秒"+calendar.get(Calendar.SECOND));//結果:5

        //獲取該日曆物件轉成的日期物件
        Date date = calendar.getTime();
        System.out.println("時間:"+date);//結果:Wed Dec 19 14:17:42 CST 2018

        //設定指定欄位的日期值
        calendar.set(Calendar.YEAR, 2020);
        calendar.set(Calendar.MONTH, 4);
        calendar.set(Calendar.DATE, 20);
        Date date2 = calendar.getTime();
        System.out.println("時間:"+date2);//結果:Wed May 20 14:20:14 CST 2020

        //或者用子類建立物件也是可以實現的:
        Calendar c = new GregorianCalendar();
    }
}

System類

System中代表程式所在系統,提供了對應的一些系統屬性資訊,和系統操作。System類不能手動建立物件,因為構造方法被private修飾,阻止外界建立物件。System類中的都是static方法,類名訪問即可。其構造方法為Final型別因此一般不會建立物件,並且成員方法一般為靜態方法
示例程式碼:

import com.manager.pojo.Employees;
import java.util.Arrays;

public class TextSystem {
    public static void main(String[] args) {
    //常用方法:
        //currentTimeMillis()返回以毫秒為單位的當前時間
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            System.out.println("hi:" + i);
        }
        long end = System.currentTimeMillis();
        System.out.println("共耗時:" + (end - start) + "毫秒");
        //結果:hello:99999
        //共耗時:615毫秒

        //exit(int status)用來結束正在執行的Java程式。引數傳入一個數字即可。通常傳入0記為正常狀態,其他為異常終止
        System.out.println("你好啊");
        System.exit(0);
        System.out.println("你不好");
        //輸出結果:你好啊

        //System.gc();//用來執行JVM中的垃圾回收器,完成記憶體中垃圾的清除。
        Employees employees = new Employees();
        employees.setE_Code("11");
        employees.setE_RealName("張三");
        System.out.println(employees);
        employees=null;
        System.gc();
        //輸出結果:Employees{e_Code='11', e_RealName='張三'}
        //當前物件被回收了,Employees{e_Code='11', e_RealName='張三'}
        
        //arraycopy(Object src,int srcPos,Object dest,int destPos,int length):
        //從指定源陣列中複製一個數組,複製從指定的位置開始,到目標陣列的指定位置結束,注意是替換而不是插入。
        int[] arr1 = {11,22,33,44,55};
        int[] arr2 = {5,6,7,8,9,10};
        System.arraycopy(arr1,1,arr2,2,2);
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        //輸出結果:[11, 22, 33, 44, 55]
        //          [5, 6, 22, 33, 9, 10]
}
}

Employees程式碼

   private String e_Code;
   private String e_RealName; 
  public String getE_Code() {
        return e_Code;
    }

    public void setE_Code(String e_Code) {
        this.e_Code = e_Code;
    }

   public String getE_RealName() {
        return e_RealName;
    }

    public void setE_RealName(String e_RealName) {
        this.e_RealName = e_RealName;
    }
 @Override
    public String toString() {
        return "Employees{" +
                "e_Code='" + e_Code + '\'' +
                ", e_RealName='" + e_RealName + '\'' +
                '}';
    }
    @Override
    protected void finalize() throws Throwable {
        System.out.println("當前物件被回收了,"+this);
        super.finalize();
    }

Scanner

用Scanner類的方法可以完成接收鍵盤錄入的資料

示例程式碼:

public class ScannerDemo {
    public static void main(String[] args) {
        //建立鍵盤錄入物件
        Scanner sc = new Scanner(System.in);
        //接收資料
        System.out.println("請輸入一個字串資料:");
        String s = sc.nextLine();
        
        //輸出結果
        System.out.println("s:"+s);
    }
}

String

字串類由多個字元組成的一串資料字串其本質是一個字元陣列

示例程式碼:

public class TestString {
    public static void main(String[] args) {
     /*構造方法1
        * String(String original)把字串資料封裝成字串物件
        * */
       String str = new String("hi");
       System.out.println(str);//輸出結果:hi

        /*構造方法2
        * String(char[] value):把字元陣列的資料封裝成字串物件
        * */
        char[] chs = {'a','b','c','d','e'};
        String str2 = new String(chs);
        System.out.println(str2);//輸出abcde

        /*構造方法3
        * String(char[] value, int index, int count):把字元陣列中的一部分資料封裝成字串物件
        * */
        String str3 = new String(chs,1,3);//取下標1開始3結束
        System.out.println(str3);//輸出結果:bcd

        /*最簡潔的*/
        String str4 = "hi";
        System.out.println(str4);//輸出結果:hi

        /*
        *   String str = new String("hi");
        *   String str4 = "hi";
        *   的建立區別:
        *   通過構造方法建立的字串物件和直接賦值方式建立的字串物件有什麼區別呢?
        *   通過構造方法建立字串物件是在堆記憶體。
        *   直接賦值方式建立物件是在方法區的常量池
        * */

        //用==比較的是地址
        System.out.println(str4==str);//輸出結果:false

        //用equals(Object obj)比較的是值
        System.out.println(str4.equals(str));//輸出結果:true

        //equalsIgnoreCase(String str):比較字串的內容是否相同,忽略大小寫
        System.out.println(str4.equalsIgnoreCase(str));//輸出結果:true

        //startsWith(String str):判斷字串物件是否以指定的str開頭
        System.out.println(str4.startsWith("h"));//輸出結果:true

        //length():獲取字串的長度,其實也就是字元個數
        System.out.println(str4.length());//輸出結果:2

        //charAt(int index):獲取指定索引處的字元
        System.out.println(str4.charAt(1));//輸出結果:i

        //indexOf(String str):獲取str在字串物件中第一次出現的索引
        System.out.println(str4.indexOf("i"));//輸出結果:1

        //substring(int start):從start開始擷取字串
        System.out.println(str4.substring(1));//輸出結果:i

        //substring(int start,int end):從start開始,到end結束擷取字串。包括start,不包括end
        System.out.println(str4.substring(0,1));//輸出結果:h
    }
}

StringBuilder

StringBuilder是一個可變的字元序列。StringBuilder類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。

String和StringBuilder的區別:String的內容是固定的, StringBuilder的內容是可變的
String每次拼接都會產生新的字串物件,而利用StringBuilder來拼接字串自始至終用的都是同一個StringBuilder容器

示例程式碼:

public class TestStringBuilder {
    public static void main(String[] args) {
        //建立物件
        StringBuilder sb = new StringBuilder();
        //返回當前容量
        System.out.println(sb.capacity());

        //返回長度(字元數)
        System.out.println(sb.length());

        //append可以新增任意型別,物件,字串,int,陣列,boole
        System.out.println(sb.append("sfl"));

        //鏈式程式設計
        sb.append("hello").append("world").append(true).append(100);
        System.out.println(sb);//輸出結果:helloworldtrue100
        System.out.println(sb.reverse());//輸出結果:001eurtdlrowolleh


        //string轉為StringBuilder
        String s = "helloworld";
        StringBuilder sb2 = new StringBuilder(s);
        System.out.println(sb2);//輸出結果:helloworld

        //StringBuilder轉為string
        sb.append("hello").append("world");
        s = sb.toString();
        System.out.println(s);//輸出結果:helloworld
    }

}