java學習筆記(五)-面向對象(屬性和方法)

編程思想

1. 面向過程的編程思想
    解決問題的時候按照一定的過程(流程)
    鐘點工—> 大象裝冰箱      總共分幾步
    1.開門      2.大象裝裏面     3.關門
    以過程爲本–複用–增加了很多冗餘
    大段的過程 拆分成小段 — 到底是哪一個實體來做的
2.面向對象的編程思想
    解決問題的時候按照現實生活中的規律來考慮問題
    考慮在這個問題的過程中      有幾個實體參與進來
     理解爲     實體動作動作的支配者     沒有實體動作就發生不了
    人     冰箱     大象
    分析每一類個體都有什麼特點 做了哪些事情
    大象      特點     大     體重很重
    冰箱     特點     有門     容積
    人      特點     能做事情 做了哪些事情呢 ? 開冰箱門 裝大象 關門    

面向對象

1. 類和對象

類----人類 抽象籠統的概念 描述一類事物 肯定是具有相同的特徵行爲
        人類有名字    有年齡    有性別-----靜態描述特徵(特徵)-----屬性
        人類能吃飯    能說話    能學習-----動態動作行爲(做事)-----方法
對象–具體的人        人類中的一個具體的人     鄭中拓
        鄭中拓這個具體的人     有名字     有年齡    有性別
                                              能吃飯     能說話    能學習
在現實生活中 對象是先有的 總結出來的概念(類) 後產生的
在計算機中利用面向對象的思想來做事
        需要先自己定義(描述)一個類(型)
        想要做事情 需要在描述的類中創建一個具體的個體(對象)出來
        個體(對象)來做事

2. 如何在計算機中創建(描述)一個類

1.先創建一個類class
2.類的裏面 利用屬性或方法去描述這個類
3.創建一個當前類的對象   讓對象調用屬性/方法做事   對象的創建在哪兒都可以

public class Person {
        //這個文件是在計算機內 畫的一張圖紙
        //描述計算機裏的人類長成什麼樣子

        //屬性--靜態描述特點
        //  必要的組成部分
        //  修飾符  數據類型  屬性名字 [= 值];
        public String name;//全局變量
        public int age;
        public String sex;//
        //*方法--描述可以做什麼事情(動作)
}

3. 類中的成員

類中的四個成員

  1. 屬性 – 靜態描述特徵(存值)
        權限修飾符 [特徵修飾符] 屬性類型 屬性名字 [= 值];
  2. 方法 – 動態描述行爲(做事情)
        權限修飾符 [特徵修飾符] 返回值類型 方法名字 ([參數列表]) [拋出異常] [{方法體}]
        最主要的是方法設計的參數及返回值問題 傳遞 調用 執行 內存
  3. 構造方法 – 創建當前類對象(做事情 唯一的事情)
        權限修飾符 與類名相同的方法名 ([參數列表]) [拋出異常] {方法體}
  4. 程序塊 – 一個特殊的方法(沒名 做事情 不用我們調用 構建對象之前調用)
        {方法體}

3.1 屬性

權限修飾符 [特徵修飾符] 屬性類型 屬性名字 [= 值];

3.2 方法

方法---->做一件事情
   權限修飾符 [特徵修飾符] 返回值類型 方法名字 (參數列表) [拋出異常] [{
         方法體
    }]
    權限修飾符  返回值類型  方法名字  (參數列表) {
    }
    1.無參數無返回值
    2.無參數有返回值
    3.有參數無返回值
    4.有參數有返回值
   人類有名字 有年齡 有性別----屬性
   人類能吃飯 能說話 能學習----方法
   
   方法中最主要的兩個結構 方法的參數列表 方法的返回值類型
   方法體 可以理解爲方法是做了一件事情
   返回值 可以理解爲返回值是這件事情做完了 留下的一個結果
   返回值又有 基本數據類型 引用數據類型的區別 (詳情見練習1)
   參數  可以理解爲參數是做事情之前 必須提供的條件(可以多個)

3.3 構造方法

構造方法—做事情

  1. 作用: 只有一個 構建(構造)當前類的對象
  2. 寫法: 權限修飾符 與類名一致的方法名  (參數列表) [拋出異常]{
          一件事情 創建一個對象(當前類Person)
         返回對象;
       }
  3. 用法: 通過new關鍵字調用
  4. 特點:
    1. 每一個類都有構造方法,若自己在類中沒有定義,系統會默認提供一個無參數的構造方法
      若在類中自己定義了構造方法,則默認無參數的構造方法即被覆蓋
    2. 構造方法是否存在方法重載?----存在構造方法重載
  5. 每一個類都有構造方法
       若不定義 系統會默認提供構造方法
       爲什麼要定義構造方法? 什麼時候需要設計構造方法?
       在創建對象的同時 想要一併做一些事情 默認提供的構造方法是不會做的
       這個時候我們可以自己定義構造方法(無參數的構造方法內做事 也可以定義帶參數的)
       如果自定義了有參的構造方法 必須自己添加無參的構造方法(因爲添加有參構造方法後 系統就不會再默認添加無參構造方法)

3.4 程序塊(代碼塊)

  1. 作用: 跟普通方法一樣 做事情的
  2. 寫法: 可以認爲程序塊是一個 沒有修飾符 沒有參數 沒有返回值 沒有名字的特殊方法
        {
        }
  3. 用法: 塊也需要調用才能執行 我們自己調用不到(沒有名字)
        每一次我們調用構造方法之前 系統會幫我們自動的調用一次程序塊 讓他執行一遍
  4. 特點: 沒有什麼重載的概念(壓根連名字都沒有 連參數都沒有)
       但是可以在類中定義 多個程序塊
  5. 塊可以在裏面寫一些程序 我想要在創建對象之前執行

overload—方法重載

  1. 概念:一個類中的一組方法 相同的方法名字 不同的參數列表 這樣的一組方法構成了方法重載
       參數列表的不同體現在哪裏?
       參數的個數 參數的類型 參數的順序
  2. 作用:爲了讓使用者便於記憶與調用 只需要記錄一個名字 執行不同的操作
  3. 自己也可以設計方法重載
       調用方法的時候 首先通過方法名字定位方法
       如果方法名字有一致 可以通過參數的數據類型定位方法
       如果沒有與傳遞參數類型一致的方法 可以找一個參數類型可以進行轉化(自動)
  4. JDK1.5版本之後 出現了一個新的寫法
       int… x 動態參數列表 類型固定 個數可以動態 0–n都可以
         x本質上就是一個數組 有length屬性 有[index]
       動態參數列表的方法  不能 與相同意義的數組類型的方法構成方法重載 本質是一樣的
       動態參數列表的方法 可以不傳參數 相當於0個 數組的方法 必須傳遞參數
       動態參數列表在方法的參數中只能存在一份兒 且必須放置在方法參數的末尾
    public class TestOverload {
        public void test(int...x){//本質數組  int[] x = {1,2,3,4,5,6};
            System.out.println("執行了test方法攜帶動態列表");
            for(int i=0;i<x.length;i++){
                System.out.println(x[i]);
            }
        }
        public void test() {
            System.out.println("執行了test方法沒有攜帶參數");
        }
        public void test(boolean b) {
            System.out.println("執行了test方法帶boolean參數" + b);
        }
        public void test(char c) {
            System.out.println("執行了test方法帶char參數" + c);
        }
        public void test(int i) {
            System.out.println("執行了test方法帶int參數" + i);
        }
        public void test(String s) {
            System.out.println("執行了test方法帶String參數" + s);
        }
        public static void main(String[] args) {
            //1.創建對象
            TestOverload to = new TestOverload();
            to.test(1, 2, 3, 4);

            to.test((char) 99);//方法參數傳遞  類型之間的轉化問題
            //通過對象.方法名字  調用方法   可以直接通過方法名字定位方法
            //如果方法名字一致   通過方法的參數列表類型 來定位方法
            //2.通過對象調用方法  方法執行一遍
            //to.test(true);//不傳參數 不行     傳參數 參數類型不匹配  不行

        }
    }

this關鍵字

構造方法中 屬性與變量重名 必須需要一個代替詞 代替對象

  1. this是一個關鍵字(指代詞) 代替的是某一個對象 (當前調用屬性或方法時的那個對象)
  2. this既然代替的是一個對象
      this可以調用什麼? 屬性 方法 可以
      this可以調用構造方法麼? 可以 在一個構造方法內可以調用另一個構造方法
      通過this(); 省略了構造方法的名字(必須與類名一致)
      必須在另一個構造方法內調用 必須在程序的第一行
      構造方法 一般方法 有順序 認爲構造方法早於一般方法
      在一般方法內調用構造方法呢? 不行
      構造方法可以重載 構造方法 調用另一個構造方法呢?
  3. this調用的過程可以放置在哪個位置寫?
    調用屬性或方法 這一行代碼 可以放置在類中的任何成員位置 上下順序隨意

4. 命名規則和規約

  • 規則
       字母 數字 符號 中文
       字母 區分大小寫
       數字 不能開頭
       符號 _ $
       中文 不推薦使用
  • 規約
      類名字 首字母大寫 兩個單詞以上 每一個首字母都大寫
      Test  TestOne  TestOneTwo
      屬性/方法/變量 駝峯式命名規約 首字母小寫 兩個單詞以上 第二個以後的每一個首字母大寫
      test  testOne  testOneTwo
       構造方法 與類名一致 類中唯一的大寫字母開頭的方法
       靜態常量 全部字母大寫 通過_做具體說明 BOOKSTORE_ADMIN
       包名   全部字母小寫 Java關鍵字都是小寫 注意與關鍵字不要衝突
       所有的名字最好—>見名知意(增強可讀性 層次關係縮進 見名知意 註釋)

5. 類的加載使用

類描述好了以後是不可以直接做事情
需要創建當前類的對象 通過new的方式
Person p = new Person();
通過p.調用啦 調用屬性(存值/取值) 調用方法(執行一次)

類的加載及對象的創建

public class Person {
        //這個文件是在計算機內 畫的一張圖紙
        //描述計算機裏的人類長成什麼樣子
        //屬性--靜態描述特點
        //  必要的組成部分
        //  權限修飾符 [特徵修飾符] 數據類型 屬性名字 [= 值];
        public String name;//全局變量
        public int age;
        public String sex;//
        //*方法--描述可以做什麼事情(動作)
        //設計一個方法  用來描述人類可以做吃飯這件事情
        public void eat(){
                System.out.println("吃了一碗大米飯");
        }
        //設計一個方法  用來告訴別人我的名字  "鄭中拓"
        //若方法的設計規定了返回值類型  方法內必須通過return關鍵字返回一個值
        public String tellName(){
                System.out.println("你們問我叫什麼呀?勉強告訴你們一下");
                return "鄭中拓";//只有一個
        }
        //設計一個新的吃飯方法
        //描述人類可以做吃飯飯這件事情
        public void chiFanFan(int count,String something){
                System.out.println("吃了"+count+"碗"+something);
        }
        //設計一個方法  買飲料   1.需不需要提供條件  2.需不需要給別人留下什麼結果
        //      需要提供條件   錢
        //      需要返回值     買到的飲料 名字
        public String buyDrink(int money){
                if(money>5){
                        return "紅牛";
                }else{
                        return "礦泉水";
                }
        }
}

調用

public class Test {
    //這個類沒有什麼現實意義
    //只是爲了將主方法寫在這裏
    public static void main(String[] args){
//        1.創建一個對象  人類的對象
       Person p = new Person();
       p.drawStar(5,true);
       String drinkName = p.buyDrink(10);
       System.out.println("買到了一瓶:"+drinkName);
       p.chiFanFan(2,"麪條");
       String myName = p.tellName();
       System.out.println("接收到了tellName方法的返回值:"+myName);
     
    }
}

5.1形參和實參

形參可以理解爲是方法執行時的臨時變量空間 x
實參可以理解爲是方法調用時傳遞進去的參數 a
方法調用時會將實參的內容傳遞給形參
如果內容是基本類型 傳遞的 是值 形參改變 實參不變
如果內容是引用類型 傳遞的 是引用 形參改變 實參跟着改變
詳情案例見練習1

5.2 方法設計和練習

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