java培訓(5-8節課)

賈樹丙發表於2013-11-15

物件導向:
  1.利用物件導向的語法,實現程式碼的拆分(資料儲存:物件的傳值)。
  2.利用物件導向的語法,實現程式的結構處理(繼承,多型,介面,抽象類)。
  3.用物件導向的程式設計方法,理解實現程式開發的框架和開發模式。

  程式導向:程式碼與資料不相關,通過主函式確立

  

  物件導向:在定義類的時候,資料程式碼關聯,把函式寫在類內,而不是主函式內,最終目標是類拿過來就能用

  

學籍資訊管理:(課上示例)
  管理的資料:班級,學生,老師(授課,班主任)。
  1.計算學生的考試成績,需要補考的人數。
  2.計算出教師或學生的身高體重是否正常。

Java中的註釋:
  單行(//註釋內容),多行(/*註釋內容*/):寫在類中,函式中。
  文件註釋(/**文件註釋內容*/):定義在類中。有助於程式編寫(生成幫助文件 doc檔案,系統提示)

  專案——>右鍵——>匯出(export)

Java中資料型別轉換方式:
  基本資料型別之間轉換:自動轉換(值的大小小於被賦值變數大小),強制轉換(值的大小大於被賦值變數大小)。
  複合資料型別之間轉換,或複合資料型別和基本資料型別之間轉換:使用資料型別轉換的函式。
  Integer.toString();整型--->字串
  Integer.parseInt();字串--->整型
  Double.toString();浮點--->字串
  Double.parseDouble();字串--->浮點

Java類的定義:公有的,預設的。

  •   成員變數(屬性):資料儲存,資料結構維護。
    • 訪問許可權:公有的,私有的,受保護的,預設的。
    • 儲存方式:預設的(動態儲存),靜態儲存,只讀儲存,等。

      動態儲存:預設的。在建立一個物件時,該成員變數,儲存堆區。且建立的每一個物件都獨立使用一塊記憶體空間。
        對於此成員變數的訪問只能通過物件名。
      靜態儲存:在定義成員變數時,加入static關鍵字。該成員變數在程式時,就已經儲存在全域性資料區,其建立不依賴於物件的建立。
        故,靜態成員變數只有一個,被多個物件所共享。既可以通過物件名引用也可以通過類名引用(系統推薦通過類名)。

    • 資料型別:
  • 成員函式(方法):對本類中多定義的成員變數的相關的操作。
    • 訪問許可權:公有的,私有的,受保護的,預設的。
    • 儲存方式:預設的(動態儲存),靜態儲存,只讀儲存,抽象,同步等。

      動態儲存:只能通過物件名稱來呼叫。
        為動態成員變數服務的(一般都是寫操作動態成員變數的程式碼,當然在其中也可以出現靜態成員變數的訪問)。
      靜態儲存:通過類名或物件名稱來呼叫(推薦使用類名)。
        為靜態成員變數服務的(只能寫操作靜態成員變數的程式碼)。

    • 函式的定義格式:返回值,函式名稱,引數列表:

      函式在一般情況下,遵循先定義後使用的原則。
      函式的定義:引數叫做形參(只能變數,接受資料。佔用記憶體空間)。
      函式的呼叫:引數叫做實參(變數,常量,表示式,傳送資料的)。
        因為變數的作用域不同,需要在主調函式向被調函式傳值時,需要通過引數。
      引數的傳參的方式:
        值傳遞:引數的資料型別為基本資料型別時,都是值傳遞。
        地址傳遞:除了基本資料型別,都是地址傳遞。
        在被調函式向主調函式返值時,需要通過引數的地址傳遞或函式的返回值。

    • 函式重名:多型性。

      1.不同類中同名函式:在呼叫時通過類名或物件名區分呼叫的函式具體哪個函式。
      2.同一個類中同名函式:函式的過載。
      函式的過載規則:函式名相同,但函式引數的型別,個數,順序,有一個不同。
        編譯之前:
        void aa();
        int aa(int i);
        int aa(char i);
        String aa(int i,int j);
        String aa(int a,int b);
        String aa(int i,char j);
        String aa(char a,int b);
        編譯之後:
        void aa();
        int aaint(int i);
        int aachar(char i);
        String aaintint(int i,int j);
        String aaintint(int a,int b);
        String aaintchar(int i,char j);
        String aacharint(char a,int b);
      3.函式重寫:子類和父類中有同名函式,呼叫的是那個函式。

  • 建構函式:一般情況下訪問許可權是public,沒有返回值,函式名稱必須和類名同名,引數可以任意設定,也有函式過載。(java中乜有拷貝建構函式和解構函式)

    一個類可以存在多個建構函式,建構函式使用是在new建立一個物件時,自動呼叫的。某一個物件建立時,只能呼叫一個建構函式。
      建構函式建立:
      1.當在類中沒有為其指定一個建構函式時,系統會為其自動新增一個建構函式,這個建構函式就做預設建構函式(無引數,無程式碼)。
        public 類名()
        {
          //預設建構函式
        }
      2.如果指定了類的建構函式,那麼其預設的建構函式,系統將不會自動建立。
      3.建構函式不能顯示呼叫,它是new物件呼叫,作用是用來進行對物件的初始化賦值。
        注意:建立一個物件時,先開闢記憶體空間,然後執行變數定義時賦值,最後才是執行建構函式賦值。
         final 作用於成員變數時,這個成員變數代表只讀變數。只能在定義變數時,或建構函式中對其賦值一次。
          如果定義變數時賦值,在建構函式中就不能再次賦值(賦值一次,在new物件時)。
        this指標和this函式();
          this指標:代表本物件的記憶體地址。
          this函式:代表呼叫本類的其它建構函式。

類的定義習慣:
  1.動態成員變數私有訪問許可權,通過get,set方法來進行操作。靜態成員變數直接定義公有的訪問許可權。
  2.定義兩個建構函式(一個為無參建構函式,一個具有對該類所有成員變數進行初始化賦值引數的建構函式)

  Ctrl +A ——>Ctrl + I(介面美化)

  將很多行同時縮排:選中這些行 Tab(增加縮排) Shift+Tab (減少縮排)

  類成員 定義為私有——>選中函式——>右鍵——>Source——>getandset   (直接生成getName(),setName())

類的關係:組合(一個類包含另一個類,兩個類分別建立例項),繼承(一個類是另一個類功能擴充套件,只需要建立一個類例項)

  類的組合:

public class A
{
    public int i=10;
}
public class B
{
    public A a=new A();
    public int i=10;
}
public static void main(String arg[])
{
    B b=new B();
    b.a.i;
    b.j;
}

  

  類的繼承:

public class A
{
    public int i=10;
}
public class B extends A
{
    public int i=10;
}
public static void main(String arg[])
{
    B b=new B();
    b.i;
}

繼承特性:
  1.繼承程式碼實現,繼承的儲存結構(和組合對比)。
  2.Java中所有的類彼此之間都有繼承關係,所有類都繼承Object類,將其稱為基類。如果不手動設定一個類的父類,系統會預設其父類為Object類。
  3.一個類只能有一個父類(單一的繼承),一個類可以有多個父介面(多重的繼承)。
  4.在父類和子類同名成員變數。
    建立子類物件,其會先將父類的成員變數都建立出來,然後在建立其自己的成員變數。同名時,兩個同名的成員變數分別佔用自己的記憶體空間。
    物件名.成員變數、this.成員變數代表都是子類中的成員變數。在子類內部使用super.成員變數代表其父類同名成員變數。
    注意:子類不能直接查詢其父類的父類的同名變數,需要通過其父類中轉。
  5.super指標和super函式:super指標代表子物件中屬於父物件部分記憶體空間的地址。super函式代表呼叫其父類的成員函式。
    如果在子類的夠著函式中沒有指定其呼叫其父類的哪一個建構函式,則系統預設呼叫父類的預設建構函式。否則,不再自動呼叫super函式。
  6.建構函式中:this函式和super函式,只能出現一個,因為這個函式的使用規則,都必須寫在建構函式的第一行。

  7.在父類和子類同名成員函式。。。。

靜態變數:存在於全域性資料區,不以來於物件的建立

//班級類中 
        public ststc String no;
//主函式中 
        TClass.no = "001";——>通過類名引用(系統推薦)
       new TClass().no = "002";——>通過物件名引用        

形參佔用記憶體(棧區,呼叫函式時即生成)

字串佔2塊記憶體,一是地址,二是內容 null和空字串是不同的

TClass() {no="";} 等價於 在外邊定義時private String no = null;

建立一個物件時,先開闢記憶體空間,然後執行變數定義時賦值,再執行建構函式(建構函式防止空指標異常)

Object java中的亞當夏娃,是所有類的父類

public class A {int i=10;}
public class B {int i=20;}
輸出  b.i = 20 

記憶體空間仍然存在,只是被自雷覆蓋,記憶體結構如圖

 

 

相關文章