類名 標識符(變量名/對象的引用)= new 類名();vue
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.關注點不一樣:java
2.效率不一樣:git
3.開發質量:github
4.使用範圍不一樣:flask
面向對象是基於面向過程的;jvm
面向對象代碼例子:函數
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;還會拿到方法區的地址值指向方法區。spa
·在main方法中運行到給對象p的屬性賦值時,經過地址去堆內存中找到相應屬性並賦值,運行p.sendMessage()這一步時,也是根據地址值去堆內存中找到相應的對象,再用對象去方法區中找到sendMessage()方法,而後將sendMessage()方法壓到棧中(入棧),調用完畢sendMessage()方法會出棧。code
·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!
獲取更多技術乾貨