5、Java中的物件導向(1)筆記,java物件導向

來源:互聯網
上載者:User

5、Java中的物件導向(1)筆記,java物件導向

1、物件導向 VS 面向過程 

 1 /* 2  * 理解一:人開門 3  * 面向過程:人 開啟門 4  * 物件導向: 5  * 人{ 6  *    開啟(){ 7  *        門。開開(); 8  *    } 9  * }10  * 門{11  *     開開(){12  *     }13  * }14  * 15  * 理解二:人把大象裝進冰箱16  * 面向過程:17  *     1、開啟冰箱;18  *     2、把大象放進去;19  *     3、關閉冰箱門;20  * 物件導向:21  * 人{22  *     開啟(冰箱){冰箱.開開()}23  *     操作(大象){大象。進入(冰箱)}24  *     關閉(冰箱){冰箱。合上()}25  * }26  * 大象{27  *     進入(冰箱){}28  * }29  * 冰箱{30  *     開開(){}31  *     合上(){}32  * }33  */

2、物件導向的編程關注於類的設計!

  2.1、一個項目或者工程不管多龐大一定是有一個一個的類構成的。

  2.2、類是抽象的,好比是製造汽車的圖紙。而具體的一輛一輛的車,是根據圖紙製造的,實際上就是類的執行個體化

 1 /* 2  * 1、物件導向的編程關注於類的設計 3  * 2、設計類實際上就是設計類的成員 4  * 3、基本的類的成員,屬性(成員變數或Field)&方法(Method) 5  */ 6 public class TestPerson { 7     public static void main(String[] args) { 8         Person p1 = new Person(); 9         p1.info();10         11         p1.name = "鐘超";12         p1.age = 21;13         p1.sex = true;14         p1.info();15         16         p1.setName("張三");//p1.name = "張三"17         p1.info();18         19         Person p2 = p1;20         System.out.println("P1:" + p1);21         System.out.println("P2:" + p2);22         p2.info();23         24         p2 = new Person();25         System.out.println("P2:" + p2);26         p2.info();27         //執行個體化Scanner類的對象,通過此對象.nextXxx的方法進行調用,完成相應的功能;28         Scanner s = new Scanner(System.in);29         int i = s.nextInt();30         31         Person p3 = new Person();32         p3.info();33     }34 }35 //類:是抽象的。36 class Person{37     //1.屬性38     String name;39     int age = 10;40     boolean sex;41     42     //2.方法43     public void eat(){44         System.out.println("人吃飯");45     }46     public void sleep(){47         System.out.println("人睡覺");48     }49     50     public String getName(){51         return name;52     }53     public void setName(String n){54         name = n;55     }56     57     public void info(){58 //        eat();59 //        sleep();60         System.out.println("name:" + name + "age:" + age + "sex:" + sex);61     }62 }

3、完成一個項目(或功能)的思路

  3.1、所要完成的功能對應的類的對象是否存在;

  3.2、若存在,則通過對象直接調用對應的類中的屬性或方法即可;

  3.3、若不存在,需要建立類的對象。甚至說,類都不存在就需要設計類;

4、物件導向編程的三條主線:

  1、類以及類的構成成分:屬性 方法 構造器 代碼塊 內部類

  2、物件導向編程的特徵:封裝性 繼承性 多態性 (抽象性)

  3、其他的關鍵字:this super package import static final abstract interface...

類:

1、關注於類的設計

2、類的組成成分:

  1、屬性(成員變數,Field)

  2、方法(成員方法,函數,Method)

3、關於屬性:

4、方法:

  1 /*  2  * 一、物件導向思想的落地法則一:  3  * 1.設計類並設計類的成員(成員變數&方法)  4  * 2.通過類來建立類的對象(也稱作類的執行個體化)  5  * 3、通過“對象。屬性”或“對象。方法”來調用,完成相應的功能  6  *   7  * 二、建立的多個對象,彼此各自擁有一套類的屬性,當對其中一個對象的屬性進行修改時。  8  * 不會影響到其他對象的屬性值。  9  *  10  * 三、類的屬性(成員變數) 11  *     成員變數    VS     局部變數 12  *     相同點:1、遵循變數聲明的格式;資料類型 變數名 = 初始化值; 13  *          2、都有範圍: 14  *     不同點:1、聲明的位置的不同:成員變數:生命在類裡,方法外邊; 15  *                               局部變數:聲明在方法內,方法的形參部分,代碼塊內 16  *          2、成員變數的修飾符有四個:public(公用的) private(私人的) protected 預設 17  *                    局部變數沒有修飾符:與所在的方法的修飾符一樣; 18  *          3、初始化值:一定會有初始化值; 19  *                   成員變數:如果在聲明的時候,不顯示的賦值,那麼不同的資料類型會有不同的預設初始化值; 20  *                 byte short int long = 0; 21  *                 float double = 0。0; 22  *                 char = 空格; 23  *                 boolean = false; 24  *                 引用類似的變數  = null; 25  *                  局部變數:一定要顯示的賦值(局部變數沒有預設初始化值); 26  *          4、二者在記憶體中存放的位置不同,成員變數在堆空間中,局部變數在棧空間中; 27  * 總結:關於變數的分類:1、按照資料類型的不同:基礎資料型別 (Elementary Data Type)(8種)&引用資料類型 28  *                  2、按照聲明位置的不同::成員變數&局部變數 29  *  30  * 四、類的方法:提供某種功能的實現 31  *         1、執行個體    public void eat(){方法體} 32  *               public String getName(){} 33  *               public void setName(String n){} 34  *         2、格式:許可權修飾符  傳回值類型(void:無傳回值/具體傳回值) 方法名(形參){} 35  *         3、關於傳回值類型 void:表名此方法不需要傳回值  36  *                     有傳回值的:在方法的最後一定有return + 傳回值類型對應的變數 37  *           記憶:void與return不可以同時出現在一個方法內。 38  *         4、方法內可以調用本類的其他方法和屬性,但是不能再方法內在定義其他方法; 39  *  40  * ClassRoom Car ... 41  */ 42 public class Zoo { 43     public static void main(String[] args) { 44         //基礎資料型別 (Elementary Data Type)的聲明:資料類型 變數名 = 初始化值; 45         int i = 10; 46         //1.類的執行個體化:如下的a1就是一個實實在在的對象 47         Animal a1 = new Animal(); 48         //int[] arr = new int[10]; 49         //通過對象調用屬性 50         a1.name = "花花"; 51         a1.age = 3; 52         System.out.println("name:" + a1.name + "\t" + "age:" + a1.age); 53         //通過對象調用方法 54         a1.eat(); 55         a1.sleep(); 56          57         //在建立一個對象 58         Animal a2 = new Animal(); 59         System.out.println("name:" + a2.name + "\t" + "age:" + a2.age); 60         a2.name = "小花"; 61         System.out.println("name:" + a1.name + "\t" + "age:" + a1.age); 62         System.out.println("name:" + a2.name + "\t" + "age:" + a2.age); 63         //a3與a1一樣,a3不意味著相較於a1重新建立的一個對象,而是a1與a3共用一個對象實體 64         Animal a3 = a1; 65         System.out.println("name:" + a3.name + "\t" + "age:" + a3.age); 66         a3.name = "維尼熊"; 67         System.out.println("name:" + a1.name + "\t" + "age:" + a1.age); 68          69         System.out.println(a2.getName()); 70         System.out.println(a2.desc()); 71     } 72 } 73  74 class Animal{ 75     //1.屬性 76     String name; 77     int age; 78     //2.方法 79     public void eat(){ 80         System.out.println("動物進食"); 81     } 82     public void sleep(){ 83         System.out.println("動物休眠"); 84         //return; 85     } 86     public String getName(){ 87         return name; 88     } 89     public int getAge(){ 90         return age; 91         //其後不可以聲明語句 92         //System.out.println("Hello"); 93     } 94     //當通過對象調用此方法是,會將方法的傳回值提供給方法的調用者,也就是當前的對象。 95     public String desc(){ 96         if(age > 2){ 97             return "恰同學少年"; 98         }else{ 99             return "還是看動畫片的 年齡";100         }101     }102     public void setName(String n){103         name = n;104     }105     public void addAge(){106         int i = 2;107         age += i;108     }109     public void info(){110         //可以在方法內調用本類的其他方法,但是不可以在方法內在定義新德爾方法111         eat();112         sleep();113 //        public void breathJ(){114 //            System.out.println("呼吸");115 //        }116     }117     //System.out.println("Hello!");118 }

5、物件導向編程思想的落地法則一:

  1、設計並建立類以及類的成分;

  2、執行個體化類的對象;

  3、通過“對象.屬性”或“對象.方法”的形式完成某項功能

6、類的初始化記憶體解析:

  6.1、記憶體劃分的結構:

    棧(stack):局部變數、對象的引用名、數組的引用名

    堆(heap):new出來的“東西”(比如:對象的實體,數組的實體),含成員變數

    方法區:含字串常量

    靜態域:聲明為static的變數

  6.2、理解的基礎上,要學會基本的建立的類的對象在記憶體中的運行。

7、方法的重載(overload):

要求:1、同一個類中;
* 2、方法名必須相同;
* 3、方法的參數列表不同;1、參數的個數不同;
* 2、參數類型不同;
* 4、方法的重載與方法的傳回值類型沒有關係;

 1 /* 2  * 方法的重載(overload) 3  * 要求:1、同一個類中; 4  *        2、方法名必須相同; 5  *        3、方法的參數列表不同;1、參數的個數不同; 6  *                       2、參數類型不同; 7  *        4、方法的重載與方法的傳回值類型沒有關係; 8  */ 9 public class TestOverLoad {10 11 }12 class OverLoad{13     //定義兩個int型變數的和14     public int getSum(int i, int j){15         return i + j;16     }17     //定義三個int型變數的和18     public int getSum(int i, int j, int k){19         return i + j + k;20     }21     //不能與其他幾個方法構成重載22 //    public int getSum1(int i, int j, int k){23 //        return i + j + k;24 //    }25 //    public void getSum(int i, int j, int k){26 //        System.out.println(i + j + k);27 //    }28     //定義兩個double型的資料的和29     public double getSum(double d1, double d2){30         return d1 + d2;31     }32     //定義三個double型資料的和33     public void getSum(double d1,double d2,double d3){34         System.out.println(d1 + d2 + d3);35     }36     //以下兩個方法也構成重載37     public void method1(int i, String str){38         39     }40     public void method1(String str1, int j){41         42     }43 }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.