Java 第十天(純乾貨)(Api 、String 、Date、SimpleDateFormat 、Calendar、面試題、自動裝箱和拆箱)(帶你14天瞭解並掌握Java SE)

今日內容

  • 數組排序之冒泡排序和Arrays工具類
  • 包裝類
  • Date類和SimpleDateFormat類

01. 數組排序之冒泡排序原理圖解

  • 看圖分析
  • 相鄰的兩個數進行比較

02. 數組排序之冒泡排序代碼實現

  • 代碼實現
  • 7分鐘時間練習

03. Arrays類的概述和使用

  • Arrays:提供了對數組操作的各種方法。

    • public static String toString(int[] a):把數組轉成字符串 * 細節: println()打印字符數組的時候, 不需要調用toString方法, 也可以直接打印出字符元素 * 原因: println方法底層對字符數組有特殊支持 --> 自動遍歷打印
    • public static void sort(int[] a):對數組進行升序排序
    • static int binarySearch(int[] a, int key) : 查找傳入元素在傳入數組中出現的索引位置, 如果沒有找到, 返回-插入點-1 --> 注意: 二分查找法, 只能操作有序數組
  • 轉ppt練習

04. Arrays類中構造方法的問題

  • 一般什麼情況下構造方法需要私有?
總結: 如果一個類中, 所有的成員, 都是靜態修飾的. 
        往往會多做一步操作, 私有構造方法

            如果構造方法被私有了, 在API中就不會顯示出來.


--------------以下爲擴展內容------------------

細節: 如果在編寫一個類的時候, 構造方法被私有了, 那麼在生成幫助文檔的時候, 構造方法將不會顯示.

如何生成幫助文檔:

        1. 對着類右鍵
        2. 導出
        3. java -> javadoc
        4. 選擇一個存放的路徑

05. 基本類型包裝類的概述

  • 爲什麼要有包裝類?
  • 基本數據類型對應的包裝類有哪些?
總結:
    1: 包裝類就是對基本數據類型, 進行包裝, 使其功能變得更加強大

                進行包裝 : 將一個基本類型變成了類, 類中就會有方法

    2:  

        int                     -->     Integer
        char                    -->     Character
        -----------------------------------------------
        byte                    -->     Byte
        short                   -->     Short
        long                    -->     Long
        boolean                 -->     Boolean
        float                   -->     Float
        double                  -->     Double

06. Integer類的概述和構造方法

  • Integer常用構造方法
1:  Integer(int value)      --> 將一個基本數據類型, 包裝成Integer對象

                                    int num = 10;
                                    Integer i = new Integer(num);       --> 包裝

    Integer(String s)       --> 將一個數字類型的字符串, 轉換爲Integer類型的數值

                                    注意: 只能操作的是[數字類型]的字符串.

07. int類型和String類型的相互轉換

  • int intValue() -->
  • static int parseInt(String s) -->
  • static String toString() --> .
總結:
    1. int -- String
            A. 推薦: 使用字符串的+拼接        
                        舉例: --> 100 + ""
            B. 不推薦: 將int --> Integer --> toString()
                        舉例: Integer i = new Integer(100);
                              i.toString();
    2. String -- int
            A. 推薦: 使用Integer.parseInt("123");
                        舉例: Integer.parseInt("123");

            B. 不推薦: 將字符串封裝成Integer --> 調用intValue();
                        舉例: Integer i = new Integer("123");
                              i.intValue();

08. Integer的練習之把字符串中的數據排序

  • 需求
  我有如下一個字符串:"91 27 46 38 50"
  請寫代碼實現最終輸出結果是:"27 38 46 50 91"
  提示:這裏需要參考String類中的方法
  public String[] split(String regex)

  分析:
        A:定義一個字符串對象
        B:把字符串中的數字數據存儲到一個int類型的數組中
        C:對int數組進行排序
        D:把排序後的數組中的元素進行拼接得到一個字符串
        E:輸出字符串
  • 需要記憶的方法 : String[] split(String regex) : 根據傳入的字符串, 切割給定的字符串.
        注意: 如果遇到了特殊字符, 需要加入\\進行轉義.

09. JDK5的新特性自動裝箱和拆箱

  • 自動裝箱:把基本數據類型轉換爲對應的包裝類類型
    • public static Integer valueOf(int i)
  • 自動拆箱:把包裝類類型轉換爲對應的基本數據類型
    • public int intValue()
總結:
    1.   手動拆箱: 手動的將Integer對象轉換爲int整數
                    Integer i = new Integer(100);
                    int num = i.intValue();

         自動拆箱: 可以將包裝類Integer對象, 直接賦值給int數據類型

                    Integer i = null;
                    // 將包裝類直接賦值給基本數據類型  
                    int num = i;        // 自動拆箱 -> 底層會自動幫我們調用intValue
                                        // null調用方法, 就會引發空指針異常
                    System.out.println(num);

    2. 手動裝箱: 手動的將基本數據類型, 包裝成包裝類對象

                    int num = 10;
                    Integer i = new Integer(num);



       自動裝箱: 將基本數據類型, 直接賦值給包裝類對象的引用

            Integer i = 100;        // 自動裝箱, 底層是通過valueOf和有參構造配合使用的

            會先判斷裝箱的值是否在byte的取值範圍內, 如果不在, 使用構造方法創建
            如果在的話, 則通過底層數組直接獲取Integer對象.

        public static Integer valueOf(int i) {      
            assert IntegerCache.high >= 127;
            if (i >= IntegerCache.low && i <= IntegerCache.high) {
                return IntegerCache.cache[i + (-IntegerCache.low)];
            }   
            return new Integer(i);
        }



面試題:

    Integer i = new Integer(1);
    Integer j = new Integer(1);
    System.out.println(i==j);                   // false                        
    System.out.println(i.equals(j));            // true

    Integer a = 500;        
    Integer b = 500;
    System.out.println(a==b);                   // false
    System.out.println(a.equals(b));            // true

    Integer aa = 127; 
    Integer bb = 127; 
    System.out.println(aa==bb);                 // true
    System.out.println(aa.equals(bb));          // true

10. Date類的概述和構造

  • Date類的作用?
  • 常見構造有?
總結:
    1:  Date類用於表示時間

    2:  Date(): 根據當前時間, 封裝時間對象
        Date(long date): 根據傳入的毫秒值, 在時間原點上累加, 封裝時間對象.

            時間原點: 1970-1-1 00:00:00

11. Date類的常用方法

  • void setTime(long time)
  • long getTime()
總結:
    1:
            setTime(long time)  類似Date的有參構造
            可以根據傳入的毫秒值轉換成對應的日期對象.
    2:
            getTime() : 根據日期對象獲取毫秒值.
            Date d = new Date(1000);        --> getTime返回結果--> 1000

            對比: System.currentTimeMillis只能獲取1970-1-1日到今天的毫秒值.

12. SimpleDateFormat類的概述和使用

  • SimpleDateFormat可以實現怎樣的操作?
總結:
    1: 可以將日期字符串"2088年8月8日" --> 日期對象.

            String s = "2088年8月8日";
            // 1. 創建日期格式化對象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
            // 2. 調用parse方法, 將傳入的日期字符串轉換爲日期對象
            Date d = sdf.parse(s);
            System.out.println(d);


    2: 將日期對象, 轉換成日期字符串.

            Date d = new Date();
            // 1. 創建日期格式化對象
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            // 2. 調用格式化的format方法, 將日期對象轉換成字符串
            String s = sdf.format(d);
            System.out.println(s);
  • 案例演示: 求出你來到這個世界多少天

13. Date的練習之日期工具類的定義和使用

  • 需求:

    • 把日期轉換爲指定格式的字符串
    • 兩個明確:
      • 返回值類型:String
      • 參數列表:Date date, String format
  • 需求:

    • 把指定格式的字符串解析爲日期
    • 兩個明確:
      • 返回值類型:Date
      • 參數列表:String s, String format

14. Calendar

  • 成員方法

    • public static Calendar getInstance() --> 獲取子類對象

    public int get(int field) --> 根據對應的成員字段獲取年月日...

    public void add(int field,int amount) --> 設置指定字段的偏移量 public final void set(int year,int month,int date) --> 設置爲某一年的具體日期 void set(int field, int value) --> 設置指定字段爲對應的值.

  • 常用字段

    • Calendar.YEAR --> 年 Calendar.MONTH --> 月 --> 使用的時候需要+1 --> 老外按照0-11 Calendar.DAYOFMONTH --> 日 DAYOFWEEK --> 星期 --> 使用的時候需要查表 Calendar.DAYOFYEAR --> 獲取當前日期在這一年中的第多少天

    //char[] cArr = {' ','日','一','二','三','四','五','六'};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章