Java靜態方法和例項方法 java中的陣列作為形參傳入
Java靜態方法和例項方法 java中的陣列作為形參傳入
Java虛擬機器
啟動一個Java程式的時候,會誕生一個虛擬機器例項,當程式關閉退出時,該例項會消失。
如果一個機器上執行著三個Java程式,即有三個Java虛擬機器例項
Java虛擬機器會呼叫某個初始類的main()方法執行一個Java程式,此方法將會作為程式的初始執行緒啟動,任何執行緒都是由主執行緒啟動的。
守護執行緒和非守護執行緒
Java虛擬機器有兩種執行緒,守護執行緒和非守護執行緒。
例如垃圾收集任務的執行緒,屬於守護執行緒。
Java可以將建立的任何執行緒定義為守護執行緒
main為非守護執行緒,當虛擬機器中的所有非守護執行緒終止的時候,虛擬機器例項將會自動退出。
類載入器
用於載入class檔案中的類
執行資料區
分為本地方法區,堆,棧,暫存器,本地方法棧
方法區
被稱為靜態區,和堆一樣,會被所有執行緒共享。方法區會包含靜態的class和static變數
在java虛擬機器啟動的時候會被裝載
堆
儲存物件,即new出的例項,會在堆中儲存。
會被所有執行緒共享,不存放基本型別和物件引用。
物件中會有一個指向方法區的指標,用來把堆中new出的物件和方法區的類和靜態變數連線起來
堆有兩個部分,一個控制程式碼池,一個物件池。
控制程式碼池
控制程式碼池有兩部分,一個指向物件變數的指標
a e = new a()
其中,儲存的是執行物件變數的指標,即指向棧中e的變數的地址
還有一部分是指向方法區中的指標
即指向方法區中類a的指標
物件鎖
虛擬機器中每個物件都有一個物件鎖,用於協調多個執行緒訪問同一個物件時的同步
關於陣列
在Java中和js一個樣子
陣列即物件,物件即陣列
陣列是儲存在堆中的
所以,在呼叫方法的時候傳入陣列即傳入了物件,這個時候(由於java中只有一個堆,用來儲存物件)在方法中對陣列的操作,即操作了堆中物件的操作。
和棧不同,屬於直接引用了堆中的地址,屬於引用而不是開闢了一塊新的儲存空間。即一個指標,指向其堆中陣列的地址
棧
每次啟動一個新執行緒的時候,Java虛擬機器會為其其分配一個棧。
Java虛擬機器只執行出棧和壓棧的操作。
某個執行緒執行的方法稱為該執行緒的當前方法,當前方法使用的棧幀屬於當前幀。當前方法屬於的類稱為當前類,當前類的常量池稱為當前常量池。
每個執行緒呼叫一個Java的方法的時候,會在該執行緒的Java棧中壓入一個新棧,這個新棧稱為當前幀,這個幀用來儲存一些非靜態變數的內容。
當方法呼叫完成以後,會彈出幀,銷燬內容
關於方法呼叫傳入陣列和變數的的區別,陣列,是一個物件,指向堆中的一塊儲存地址,變數,屬於當前方法幀中的方法棧,呼叫的時候會直接壓棧,呼叫完成以後會執行出棧操作。所以傳入變數不會儲存,傳入陣列會儲存更改
Java棧上的資料所有資料是此執行緒私有的。不能被其他執行緒共享
堆 會被共享,方法區會被共享
靜態方法和例項方法
靜態方法會在程式執行的時候直接裝載進入方法區。而例項方法會在new的時候以物件的方法裝載進入堆中。
最大的區別在於記憶體的區別,由於main函式為static靜態方法,會直接在執行的時候裝載進入記憶體區,例項方法必須new,在堆中建立記憶體區域。再進行引用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2894/viewspace-2815088/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java開發筆記(六十四)靜態方法引用和例項方法引用Java筆記
- vue 快速入門 系列 —— 例項方法(或 property)和靜態方法Vue
- Java的方法靜態方法Java
- 靜態工廠方法和例項工廠方法
- 靜態方法和例項方法的區別以及如何恰當使用
- [Python 基礎] Python 例項方法、靜態方法和類方法詳解 (包含區別和用法)Python
- java8介面的靜態方法和預設方法Java
- java靜態方法使用泛型Java泛型
- java中String類常用方法的使用與例項Java
- 方法的形參和實參
- 方法的實參和形參
- Python - 物件導向程式設計 - 例項方法、靜態方法、類方法Python物件程式設計
- 你真的瞭解靜態方法與例項方法的區別麼?
- 【Java8新特性】介面中的預設方法和靜態方法,你都掌握了嗎?Java
- Java類、物件以及(靜態)方法的探討Java物件
- Java中的靜態代理和動態代理Java
- Effective Java - 靜態方法與構造器Java
- Java方法04:擴充命令列傳參Java命令列
- java 方法呼叫,形參改變,實參是否發生改變Java
- 例項 靜態 類
- Java的幾種建立例項方法的效能對比Java
- Python常見面試題006 類方法、類例項方法、靜態方法有何區別?Python面試題
- Java靜態變數在靜態方法內部無法改變值Java變數
- 介面中的預設方法與靜態方法
- net 靜態方法與非靜態方法
- java狀態模式例項解析Java模式
- ts中如何限制方法傳入的引數data必須是陣列,且為偶數項?陣列
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- Java虛擬機器中獲得Runtime例項的方法是什麼?Java虛擬機
- 類的靜態屬性和方法
- jquery裡遍歷普通陣列和多維陣列的方法及例項jQuery陣列
- Python中類方法和例項方法有什麼區別?Python
- java陣列遍歷的方法Java陣列
- 16 ##### 適合靜態方法的場景:方法中不使用物件的值,則直接使用靜態方法物件
- 靜態方法
- vue例項的屬性和方法Vue
- Java 例項 - 檔案寫入Java
- java中的方法Java