java中的面向對象

類對象的格式

類名 標識符(變量名/對象的引用)= new 類名();

public class Tool {
    public  static  double Sum(double [] scores){
        double sum=0.0;
        for( int i = 0; i<scores.length;i++){
            sum+=scores[i];
        }
        return  sum;        
    }
}

Tool tool = new Tool();
sum1=tool.Sum(scores)

面向過程和麪向對象的區別

1.關注點不同:

  • 面向過程:關心的是事件中的每一步功能怎麼做;
  • 面向對象:關心的是事件中的每一步功能有沒有什麼對象已經實現好了,然後直接拿來使用

2.效率不同:

  • 面向過程:因爲自己要參與每一步的實現,所以效率比較慢;
  • 面向對象:因爲大多數都是調用別人已經實現好的功能,所以效率比較高;

3.開發質量:

  • 面向過程:因爲是自己一步步實現的,大多數情況會有地方出現問題;
  • 面向對象:因爲大多數都是調用別人寫好的功能,而這些功能一般都進過大量的驗證,質量有保證;

4.使用範圍不同:

  • 面向過程:適合解決需求簡單的問題;
  • 面向對象:更適合解決複雜的需求;

面向對象是基於面向過程的;

面向對象代碼例子:

public class Car {
    String color;
    void  run(){
        System.out.println(color+"顏色的車在行駛");
    }
}
class Test{
    public static void  main(String[] args){
        Car car = new Car();
        car.color="紅";
        car.run();
    }
}

一個對象調用一個方法內存圖


首先JVM運行一個class文件時,使用類加載器先將Demo類加載到方法區,然後main方法壓棧(入棧)。

·在棧中運行main方法,當jvm看到Phone時,會自動把Phone類加載到方法區;當看到局部變量p時,會在棧中開闢一塊空間;當看到new Phone()時,會在堆內存中開闢空間,並將堆內存中的對應地址0x123賦值給p;還會拿到方法區的地址值指向方法區。

·在main方法中運行到給對象p的屬性賦值時,通過地址去堆內存中找到相應屬性並賦值,運行p.sendMessage()這一步時,也是根據地址值去堆內存中找到相應的對象,再用對象去方法區中找到sendMessage()方法,然後將sendMessage()方法壓到棧中(入棧),調用完畢sendMessage()方法會出棧。

·main方法運行結束後會出棧。

通過以上步驟描述,我們可以理解,在棧內存中運行的方法,遵循"先進後出,後進先出"的原則。變量p指向堆內存中的空間,尋找方法信息,去執行該方法。

兩個對象調用同一個方法內存圖


對象調用方法時,根據對象中方法標記(地址值),去類中尋找方法信息。這樣哪怕是多個對象,方法信息只保存一份,節約內存空間。

一個引用,作爲參數傳遞到方法中內存圖


引用類型作爲參數,傳遞的是地址值。

局部變量和成員變量

成員變量:直接定義在類中的變量--直接定義在類的變量。

局部變量:定義在類中局部位置(函數中)的變量--直接定義在函數的變量。

public class test {
    int a = 10;//成員變量
    public static void   main(String[] args ){
        int a =100;//局部變量
        System.out.println("a:"+a);//100
    }
}

區別

1.從定義的位置上:

  • 局部變量:函數裏面
  • 成員變量:直接定義在類中

2.從內存上看:

  • 局部變量:棧內存中
  • 成員變量:堆內存中

3.從生命週期(指的是從分配空間到回收空間)上看:

  • 局部變量:隨着函數進棧執行,開始分配空間;函數之行結束出棧,空間被回收
  • 成員變量:隨着創建對象開始分配空間;隨着對象的空間變成垃圾空間被回收而被回收;

4.從使用範圍上:

  • 局部變量:僅限於定義它的局部範圍裏面(比如函數中)
  • 成員變量:整個類中

5.從初始值上看:

  • 局部變量:沒有默認值,使用前必須先要初始化

匿名對象

匿名對象:沒有名字的對象;

匿名對象,就是創建對象後,不將引用賦值給任何變量;

匿名對象雖然沒有那個變量持有它的引用,但是對象創建出來的時候,自己是知道自己的引用,這個時候可以使用它;

匿名對象的應用

如果一個對象只需要作爲參數被使用一次,就可以定義爲匿名對象,好處是在那行代碼執行結束後,不會繼續佔有內存空間;

開源地址

開源項目地址:https://github.com/371854496/...

java學習資料:https://github.com/371854496/...

各位覺得還闊以的話,點下Star,分享不易,thank you!

公衆號 全戰開花

獲取更多技術乾貨

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章