2.1Java面向對象思想

1.概述:
舉例:大象裝進冰箱

面向過程:強調的是執行過程(動作(函數))
    打開冰箱。
    存儲大象。
    關上冰箱。

相關語言:C語言

面向對象:強調的是指揮對象(實體)
    冰箱打開
    冰箱存儲
    冰箱關閉

相關語言:C++,Java,C#

面向對象思想圖解

特點:

1.面向對象就是一種常見的思想。符合人們的思考習慣。
2.面向對象的出現,將複雜的問題簡單化。
3.面向對象的出現,讓曾經在過程中的執行者,變成了對象中的指揮者。

2.注意點
①面向過程沒有被淘汰,只是過程(功能,函數)被封裝在了對象裏面。
②面向對象找到對象,就找了功能。
③沒有對象就創造一個對象,自己實現功能。
④遇到問題,先找對象,沒找到,就自己造一個對象實現這個功能,不是光寫一個功能。因爲這樣別人也能使用這個對象。

3.面試問題:
面試官問:你是怎麼理解面對對象的?

    面向對象符合人們的思考習慣,將複雜的問題簡單化,讓曾經面向過程中的執行者變成了面向對象中的指揮者,也就是簡單化的一種。其實面試官你本身就是在用面向對象的思想方式在思考問題。
    (爲什麼呢?)因爲以面試官您的能力而言,來了一個軟件項目,您從需求分析,到設計,到開發,到測試,都能完成。但是這樣特別耗時間,所以您爲了提高效率,您就需要去找一些具備專業編程經驗的人來完成這些項目,我正好就是那個具備專業編程經驗的對象,您只要指揮我這個對象去做事情就可以了,我可以給你一個結果,至於具體過程您就不用管了。所以面試官您就是在用面向對象的思想方式在思考問題。
1.面向對象就是找個老婆,能洗衣能做飯,就是對象,她具備這些功能。

2.面向對象就是去餐館吃飯點菜,你會先找服務員,然後說要點什麼菜,過會她就把菜上上來了。這個服務員就是對象,她具備點菜的功能,至於過程,我們不用管。

3.面向對象就是我要去電子市場攢一個電腦,但是我不懂硬件參數,這個時候我叫上懂這個的朋友和我一起去,讓他幫我看,最後告訴我買那個,我只用付錢,至於選擇的過程我不用管。

面試技巧:
因時因地因場景把問題解釋清楚,舉出生活中的實例。

1.在Java中萬物皆對象。(理解就行,面試要不要說這種話,James Gosling可以說這種話。)

2.開發時:
先找到數據所在的對象,遇到問題時,先找到問題所涉及到的對象,並不關注問題所涉及的動作。如果沒有找到具備處理問題功能的對象,就自己造對象。

還要不斷維護對象之間的關係。

4.面向對象本身的三個特徵,只有符合這三個特徵,才能稱作Java爲面嚮對象語言:

封裝,繼承,多態。

5.自然語言判斷對象:找名詞
人開門:人和門是對象。開這個動作門最清楚,所以創造對象門。

大象裝進冰箱:大象和冰箱是對象。裝進這個動作冰箱最清楚,所以創造對象冰箱。

6.類和對象的關係

類:
用Java語言對現實生活中的事物進行描述。
通過類的形式來體現。

對於事物描述通常只關注兩方面:
屬性(數值表示)
行爲(功能表示)
對象:
通過對事物的描述(某個類)來產生(new一個類的對象)實體。
對象是實實在在存在的‘個體’。
關係:
類:事物的描述。
對象:該類事物的實例。在Java中通過new創建。

計算機中 new出來的對象,則是先有類,後有對象。
生活中,看見一個事物,然後對其進行描述,則是現有對象後有類。

類與對象的關係

舉例:

/*
描述小汽車

分析:
1.屬性:
        輪胎數
        顏色
2.行爲:
        運行

定義類其實就是在定義類中的成員。
成員:成員變量(屬性),成員函數(行爲)
*/

class  Car       //這類類不用獨立運行,通過對象來調用。只相當於圖紙,成員變量是存在於每個獨立的對象中。
{
    int num = 4;        //成員變量,區別與局部變量。顯示初始化,加載過程,把4賦值給0。
    String color;   //默認初始化,默認值NULL

    void run()     //成員函數
    {
            //int num = 10;  //局部變量,存在棧內存中
            System.out.println(num + "..." + color);  //現在棧中找num,沒有再到堆中找
    }
}

class CarDemo
{
        public static void main(String[] args)
        {
                //創建(new)一個Car的實例,()裏面理解成需要指定的內容,這裏不需要指定內容
                Car c = new Car();    //給實體取個名字,c就是類類型的引用變量,指向了該類的對象地址。
//              c.run = 4;
                c.color = "red";

                c.run(); //通過 對象.成員 的形式來完成對對象中內容的調用。
                // 輸出 0...null
                show(c);
                c.run();
        }

//汽車改裝廠
        static void show(Car c)   //類類型變量一定指向對象,要不就是null
    {
        c.num = 3;
        c.color = "black";
        }
};

7.對象在內存中的體現

一個類產生一個對象,這個對象中一定包含類中的內容。對象(或者實體)的出現就是封裝數據的。

數組是封裝同一類型的數據
對象是封裝一個事物中當中具備的數據。

對象在內存中的體現1
對象在內存中的體現2

8.成員變量和局部變量的區別:

1.
成員變量定義在類中,整個類都可以訪問。
局部變量定義在函數,語句,局部代碼塊中,只有所屬區域有效。
2.
成員變量存在堆內存的對象中。
局部變量存在棧內存的方法中。
3.
成員變量隨着對象的創建而存在,隨着對象的消失而消失。
局部變量隨着所屬區域的執行而存在,隨着所屬區域的結束而釋放。
4.
成員變量都有默認初始化值。
局部變量沒有默認初始化值。

9.類類型變量一定指向對象,要不就是null。

10.匿名對象:沒有名字的對象。

new Car();  //匿名對象,其實就是定義對象的簡寫格式。

Car c = new Car();
c.run();

new Car().run();

使用方法:

1.當對象對 **方法** 僅進行一次調用一次的時候,就可以簡化成匿名對象。
new Car().run();

匿名對象調用 變量 沒有意義。
匿名對象

2.匿名對象可以作爲實際參數進行傳遞。
show(c);
show(new Car());  //前提是確保對匿名對象的操作都在show函數裏完成。這裏匿名對象是由形參指向,不會變成垃圾。

11.基本數據類型的參數傳遞:

12.引用數據類型的參數傳遞:
彈棧,壓棧,return;(表示對應棧內存釋放,就是彈棧)
圖解:

這裏寫圖片描述

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