學習mybatis之前

學習mybatis之前先複習下相關的javaj知識

例如:private static final String CONFIG="mybatis-config.xml";

1 private 

 訪問權限   類   包  子類  其他包

    public     ∨   ∨   ∨     ∨

    protect    ∨   ∨   ∨     ×

    default    ∨   ∨   ×     ×

    private    ∨   ×   ×     ×

2 static   final



###01final關鍵字概念
* A: 概述
繼承的出現提高了代碼的複用性,並方便開發。但隨之也有問題,有些類在描述完之後,不想被繼承,
或者有些類中的部分方法功能是固定的,不想讓子類重寫。可是當子類繼承了這些特殊類之後,
就可以對其中的方法進行重寫,那怎麼解決呢?
要解決上述的這些問題,需要使用到一個關鍵字final,final的意思爲最終,不可變。
final是個修飾符,它可以用來修飾類,類的成員,以及局部變量。







###02final修飾類義
* A: final 修飾類
final修飾類不可以被繼承,但是可以繼承其他類。
* B: 案例
class Yy {}
final class Fu extends Yy{} //可以繼承Yy類
class Zi extends Fu{} //不能繼承Fu類




###03final修飾方法
* A: final修飾方法
final修飾的方法不可以被覆蓋,但父類中沒有被final修飾方法,子類覆蓋後可以加final。
* B: 案例
class Fu {
// final修飾的方法,不可以被覆蓋,但可以繼承使用
public final void method1(){}
public void method2(){}
}
class Zi extends Fu {
//重寫method2方法
public final void method2(){}
}








###04final修飾局部變量
* A:修飾基本數據類型變量
final修飾的變量稱爲常量,這些變量只能賦值一次



* B:案例1
final int i = 20;
i = 30; //賦值報錯,final修飾的變量只能賦值一次

* C: 修飾引用數據類型
引用類型的變量值爲對象地址值,地址值不能更改,但是地址內的對象屬性值可以修改

* D: 修飾引用數據類型
final Person p = new Person();
Person p2 = new Person();
p = p2; //final修飾的變量p,所記錄的地址值不能改變
p.name = "小明";//可以更改p對象中name屬性值
p不能爲別的對象,而p對象中的name或age屬性值可更改。



###05final修飾成員變量
* A: 修飾成員變量
 修飾成員變量,需要在創建對象前賦值,否則報錯。(當沒有顯式賦值時,多個構造方法的均需要爲其賦值。)


* B: 案例
class Demo {
//直接賦值
final int m = 100;

//final修飾的成員變量,需要在創建對象前賦值,否則報錯。
final int n; 
public Demo(){
//可以在創建對象時所調用的構造方法中,爲變量n賦值
n = 2016;
}
}




###06static的概念
* A:概念
當在定義類的時候,類中都會有相應的屬性和方法。而屬性和方法都是通過創建本類對象調用的。
當在調用對象的某個方法時,這個方法沒有訪問到對象的特有數據時,方法創建這個對象有些多餘。
可是不創建對象,方法又調用不了,這時就會想,那麼我們能不能不創建對象,就可以調用方法呢?
可以的,我們可以通過static關鍵字來實現。static它是靜態修飾符,一般用來修飾類中的成員。











==============================第二節課開始====================================


###07static修飾的對象特有數據
* A:特點1:
被static修飾的成員變量屬於類,不屬於這個類的某個對象。
(也就是說,多個對象在訪問或修改static修飾的成員變量時,其中一個對象將static成員變量值進行了修改,
其他對象中的static成員變量值跟着改變,即多個對象共享同一個static成員變量)
* B: 代碼演示
class Demo {
public static int num = 100;
}


class Test {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
d1.num = 200;
System.out.println(d1.num); //結果爲200
System.out.println(d2.num); //結果爲200
}
}







###08static的內存圖
* A: 略
參考day13_source 靜態的內存圖.jpg



###09static注意事項_靜態不能直接調用非靜態
* A: 注意事項
被static修飾的成員可以並且建議通過類名直接訪問。

* B: 訪問靜態成員的格式:
類名.靜態成員變量名
類名.靜態成員方法名(參數)
對象名.靜態成員變量名      ------不建議使用該方式,會出現警告
對象名.靜態成員方法名(參數) ------不建議使用該方式,會出現警告

* C: 代碼演示
class Demo {
//靜態成員變量
public static int num = 100;
//靜態方法
public static void method(){
System.out.println("靜態方法");
}
}
class Test {
public static void main(String[] args) {
System.out.println(Demo.num);
Demo.method();
}
}





###10static靜態的使用場景
* A: 使用場景
static可以修飾成員變量和成員方法。
什麼時候使用static修飾成員變量?
加static修飾成員的時候,這個成員會被類的所有對象所共享。一般我們把共性數據定義爲靜態的變量
什麼時候使用static修飾成員方法?
靜態的方法只能訪問靜態的成員,如果靜態方法中引用到了靜態的其他成員,那麼這個方法需要聲明爲靜態的方法。

###11對象中的靜態調用
* A: 對象的靜態調用
  在多態中,非靜態編譯看父類,運行看子類,父類沒有編譯失敗。
  但多態中的靜態方法,編譯看父類,運行仍然看父類。因爲靜態和對象沒有關係,屬於靜態綁定。


* B: 舉例
public class Test{
public static void main(String[] args){
Fu f = new Zi();
f.show();   //父類的引用和父類的方法綁定,和對象無關,不會在運行時動態的執行子類特有的方法。
}
}

###12定義靜態常量
* A: 靜態常量
開發中,我們想在類中定義一個靜態常量,通常使用public static final修飾的變量來完成定義。
此時變量名用全部大寫,多個單詞使用下劃線連接。
* B: 定義格式:
public static final 數據類型 變量名 = 值;

* C: 如下演示:
class Company {
public static final String COMPANY_NAME = "傳智播客";
public static void method(){
System.out.println("一個靜態方法");
}
}


當我們想使用類的靜態成員時,不需要創建對象,直接使用類名來訪問即可。
System.out.println(Company.COMPANY_NAME); //打印傳智播客
Company.method(); // 調用一個靜態方法


* D: 注意:
接口中的每個成員變量都默認使用public static final修飾。
所有接口中的成員變量已是靜態常量,由於接口沒有構造方法,所以必須顯示賦值。可以直接用接口名訪問。
interface Inter {
public static final int COUNT = 100;
}
訪問接口中的靜態變量
Inter.COUNT



3

4

數據的存儲結構
A:數據的存儲結構
     a:棧結構:後進先出/先進後出(手槍彈夾) FILO (first in last out)
     b:隊列結構:先進先出/後進後出(銀行排隊) FIFO(first in first out)
     c:數組結構:
               查詢快:通過索引快速找到元素
               增刪慢:每次增刪都需要開闢新的數組,將老數組中的元素拷貝到新數組中
                      開闢新數組耗費資源
     d:鏈表結構
               查詢慢:每次都需要從鏈頭或者鏈尾找起
               增刪快:只需要修改元素記錄的下個元素的地址值即可不需要移動大量元素




5

01List接口的特點
  A:List接口的特點:
   a:它是一個元素存取有序的集合。
        例如,存元素的順序是11、22、33。那麼集合中,元素的存儲就是按照11、22、33的順序完成的)。
   b:它是一個帶有索引的集合,通過索引就可以精確的操作集合中的元素(與數組的索引是一個道理)。
   
     c:集合中可以有重複的元素,通過元素的equals方法,來比較是否爲重複的元素。


     d:List接口的常用子類有:
      ArrayList集合
      LinkedList集合


###02List接口的特有方法
A:List接口的特有方法(帶索引的方法)
   a:增加元素方法
   add(Object e):向集合末尾處,添加指定的元素 
   add(int index, Object e)   向集合指定索引處,添加指定的元素,原有元素依次後移
     
     /*
       *  add(int index, E)
       *  將元素插入到列表的指定索引上
       *  帶有索引的操作,防止越界問題
       *  java.lang.IndexOutOfBoundsException
       *     ArrayIndexOutOfBoundsException
       *     StringIndexOutOfBoundsException
       */
      public static void function(){
        List<String> list = new ArrayList<String>();
        list.add("abc1");
        list.add("abc2");
        list.add("abc3");
        list.add("abc4");
        System.out.println(list);
        
        list.add(1, "itcast");
        System.out.println(list);
      }


   b:刪除元素刪除
   remove(Object e):將指定元素對象,從集合中刪除,返回值爲被刪除的元素
   remove(int index):將指定索引處的元素,從集合中刪除,返回值爲被刪除的元素
     /*
       *  E remove(int index)
       *  移除指定索引上的元素
       *  返回被刪除之前的元素
       */
      public static void function_1(){
        List<Double> list = new ArrayList<Double>();
        list.add(1.1);
        list.add(1.2);
        list.add(1.3);
        list.add(1.4);
        
        Double d = list.remove(0);
        System.out.println(d);
        System.out.println(list);
      }
   c:替換元素方法
   set(int index, Object e):將指定索引處的元素,替換成指定的元素,返回值爲替換前的元素
      /*
       *  E set(int index, E)
       *  修改指定索引上的元素
       *  返回被修改之前的元素
       */
      public static void function_2(){
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        
        Integer i = list.set(0, 5);
        System.out.println(i);
        System.out.println(list);
      }
    d:查詢元素方法
   get(int index):獲取指定索引處的元素,並返回該元素

6

01List接口的特點
  A:List接口的特點:
   a:它是一個元素存取有序的集合。
        例如,存元素的順序是11、22、33。那麼集合中,元素的存儲就是按照11、22、33的順序完成的)。
   b:它是一個帶有索引的集合,通過索引就可以精確的操作集合中的元素(與數組的索引是一個道理)。
   
     c:集合中可以有重複的元素,通過元素的equals方法,來比較是否爲重複的元素。


     d:List接口的常用子類有:
      ArrayList集合
      LinkedList集合


###02List接口的特有方法
A:List接口的特有方法(帶索引的方法)
   a:增加元素方法
   add(Object e):向集合末尾處,添加指定的元素 
   add(int index, Object e)   向集合指定索引處,添加指定的元素,原有元素依次後移
     
     /*
       *  add(int index, E)
       *  將元素插入到列表的指定索引上
       *  帶有索引的操作,防止越界問題
       *  java.lang.IndexOutOfBoundsException
       *     ArrayIndexOutOfBoundsException
       *     StringIndexOutOfBoundsException
       */
      public static void function(){
        List<String> list = new ArrayList<String>();
        list.add("abc1");
        list.add("abc2");
        list.add("abc3");
        list.add("abc4");
        System.out.println(list);
        
        list.add(1, "itcast");
        System.out.println(list);
      }


   b:刪除元素刪除
   remove(Object e):將指定元素對象,從集合中刪除,返回值爲被刪除的元素
   remove(int index):將指定索引處的元素,從集合中刪除,返回值爲被刪除的元素
     /*
       *  E remove(int index)
       *  移除指定索引上的元素
       *  返回被刪除之前的元素
       */
      public static void function_1(){
        List<Double> list = new ArrayList<Double>();
        list.add(1.1);
        list.add(1.2);
        list.add(1.3);
        list.add(1.4);
        
        Double d = list.remove(0);
        System.out.println(d);
        System.out.println(list);
      }
   c:替換元素方法
   set(int index, Object e):將指定索引處的元素,替換成指定的元素,返回值爲替換前的元素
      /*
       *  E set(int index, E)
       *  修改指定索引上的元素
       *  返回被修改之前的元素
       */
      public static void function_2(){
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        
        Integer i = list.set(0, 5);
        System.out.println(i);
        System.out.println(list);
      }
    d:查詢元素方法
   get(int index):獲取指定索引處的元素,並返回該元素

6

數據的存儲結構
A:數據的存儲結構
     a:棧結構:後進先出/先進後出(手槍彈夾) FILO (first in last out)
     b:隊列結構:先進先出/後進後出(銀行排隊) FIFO(first in first out)
     c:數組結構:
               查詢快:通過索引快速找到元素
               增刪慢:每次增刪都需要開闢新的數組,將老數組中的元素拷貝到新數組中
                      開闢新數組耗費資源
     d:鏈表結構
               查詢慢:每次都需要從鏈頭或者鏈尾找起
               增刪快:只需要修改元素記錄的下個元素的地址值即可不需要移動大量元素



7---------------------------

###06LinkedList集合的自身特點
  A:LinkedList集合的自身特點
     底層採用鏈表結構,每次查詢都要從鏈頭或鏈尾找起,查詢相對數組較慢
     但是刪除直接修改元素記錄的地址值即可,不要大量移動元素
     
     LinkedList的索引決定是從鏈頭開始找還是從鏈尾開始找
     如果該元素小於元素長度一半,從鏈頭開始找起,如果大於元素長度的一半,則從鏈尾找起


###07LinkedList特有方法
   *A:LinkedList特有方法:獲取,添加,刪除
   /*
     *  LinkedList 鏈表集合的特有功能
     *    自身特點: 鏈表底層實現,查詢慢,增刪快
     *  
     *  子類的特有功能,不能多態調用
     */
    public class LinkedListDemo {
      public static void main(String[] args) {
        function_3();
      }




      /*
       *  E removeFirst() 移除並返回鏈表的開頭
       *  E removeLast() 移除並返回鏈表的結尾
       */
      public static void function_3(){
        LinkedList<String> link = new LinkedList<String>();
        link.add("1");
        link.add("2");
        link.add("3");
        link.add("4");
        
        String first = link.removeFirst();
        String last = link.removeLast();
        System.out.println(first);
        System.out.println(last);
      
        System.out.println(link);
      }
      
      /*
       * E getFirst() 獲取鏈表的開頭
       * E getLast() 獲取鏈表的結尾
       */
      public static void function_2(){
        LinkedList<String> link = new LinkedList<String>();
        link.add("1");
        link.add("2");
        link.add("3");
        link.add("4");
      
        if(!link.isEmpty()){
          String first = link.getFirst();
          String last = link.getLast();
          System.out.println(first);
          System.out.println(last);
        }
      }
      
      public static void function_1(){
        LinkedList<String> link = new LinkedList<String>();
        link.addLast("a");
        link.addLast("b");
        link.addLast("c");
        link.addLast("d");
        
        link.addFirst("1");
        link.addFirst("2");
        link.addFirst("3");
        System.out.println(link);
      }
      
      /*
       *  addFirst(E) 添加到鏈表的開頭
       *  addLast(E) 添加到鏈表的結尾
       */
      public static void function(){
        LinkedList<String> link = new LinkedList<String>();
        
        link.addLast("heima");
        
        link.add("abc");
        link.add("bcd");
        
        link.addFirst("itcast");
        System.out.println(link);
        
        
      }
    }

發佈了29 篇原創文章 · 獲贊 3 · 訪問量 9966
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章