摘要:在棧中運行方法,當看到時,會自動把類加載到方法區當看到局部變量時,會在棧中開辟一塊空間當看到時,會在堆內存中開辟空間,并將堆內存中的對應地址賦值給還會拿到方法區的地址值指向方法區。變量指向堆內存中的空間,尋找方法信息,去執行該方法。
類對象的格式
類名 標識符(變量名/對象的引用)= new 類名();
public class Tool { public static double Sum(double [] scores){ double sum=0.0; for( int i = 0; i面向過程和面向對象的區別 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!
公眾號 全戰開花獲取更多技術干貨
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75982.html
摘要:對象既是該類事物實實在在存在的個體。類與對象的關系圖類就是汽車汽車就是堆內存中的對象。成員變量成員變量成員函數的車,輪胎數個,跑起來了對象的創建創建對象中創建對象,使用關鍵字在堆內存中開辟了空間,產生了一個實體。 聲明:本文首發于我的個人微信公眾號【Java編程社區】,查看更多文章與學習資源請移步我的公眾號Java編程社區 萬物皆對象 學習Java,我們都聽過這句話:萬物皆對象。那么什...
摘要:眾多面向對象的編程思想雖不盡一致,但是無論哪種面向對象編程語言都具有以下的共通功能。原型編程以類為中心的傳統面向對象編程,是以類為基礎生成新對象。而原型模式的面向對象編程語言沒有類這樣一個概念。 什么是面向對象?這個問題往往會問到剛畢業的新手or實習生上,也是往往作為一個技術面試的開頭題。在這里我們不去談如何答(fu)好(yan)問(guo)題(qu),僅談談我所理解的面向對象。 從歷...
摘要:知識點總結面向對象知識點總結面向對象面向對象概念是相對于面向過程而言,過程其實就是函數,對象是將函數和屬性進行了封裝。指向了該對象關鍵字代表對象。靜態變量所屬于類,所以也稱為類變量成員變量存在于堆內存中。 Java知識點總結(面向對象) @(Java知識點總結)[Java, Java面向對象] [toc] 面向對象概念 是相對于面向過程而言,過程其實就是函數,對象是將函數和屬性進行了封...
摘要:是一種典型的面向對象編程語言。這篇文章主要是來初步理解一下面向對象的思維為下面的內容先給一個基礎。針對面向對象編程的更多內容,會在后面的文章里面詳細解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向對象編程啦。 showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...
摘要:面向對象編程從不同的角度來看待計算機程序,它注重的是計算機所完成的任務,而非處理方式。傳統的語言屬于面向過程編程,語言屬于面向對象編程。面向對象編程根據要解決的問題,可以抽象出如下對象客戶銀行卡現金票據等。 面向過程編程&面向對象編程 從面向過程到面向對象,不僅僅是編程方式的改變,更重要的是思維方式的改變。 面向過程編程按照順序執行的一系列指令,通常是分析出解決問題所需要的步驟,然后用...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
閱讀 2581·2021-11-22 12:01
閱讀 1105·2021-11-15 11:37
閱讀 3685·2021-09-22 14:59
閱讀 1746·2021-09-04 16:45
閱讀 1382·2021-09-03 10:30
閱讀 1013·2021-08-11 11:18
閱讀 2459·2019-08-30 10:53
閱讀 2013·2019-08-29 15:13