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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 陣列作為形參陣列
- javascript 靜態方法和例項方法例項JavaScript
- js--Object的靜態方法和例項方法JSObject
- Java的方法靜態方法Java
- Java開發筆記(六十四)靜態方法引用和例項方法引用Java筆記
- vue 快速入門 系列 —— 例項方法(或 property)和靜態方法Vue
- javascript的靜態方法和例項方法簡單介紹JavaScript
- JNI/NDK開發指南(6):C/C++訪問Java例項方法和靜態方法C++Java
- Python例項方法、類方法、靜態方法Python
- Python Class 的例項方法/類方法/靜態方法Python
- 靜態方法和例項方法的區別以及如何恰當使用
- 方法的實參和形參
- 方法的形參和實參
- java中static使用之靜態方法注意點Java
- java靜態方法使用泛型Java泛型
- java8介面的靜態方法和預設方法Java
- 你真的瞭解靜態方法與例項方法的區別麼?
- Js呼叫Java方法並互相傳參JSJava
- Java多執行緒3:Thread中的靜態方法Java執行緒thread
- Python - 物件導向程式設計 - 例項方法、靜態方法、類方法Python物件程式設計
- 【Java8新特性】介面中的預設方法和靜態方法,你都掌握了嗎?Java
- java中String類常用方法的使用與例項Java
- Java中的靜態代理和動態代理Java
- PHP 中 static 靜態屬性和靜態方法的呼叫PHP
- [Python 基礎] Python 例項方法、靜態方法和類方法詳解 (包含區別和用法)Python
- Java類、物件以及(靜態)方法的探討Java物件
- 為什麼要在JAVA工廠模式中使用靜態方法Java模式
- Java方法04:擴充命令列傳參Java命令列
- Effective Java - 靜態方法與構造器Java
- Java靜態匯入Java
- Java多執行緒2:Thread中的例項方法Java執行緒thread
- JAVA值傳參和引用傳參Java
- java 方法呼叫,形參改變,實參是否發生改變Java
- 介面中的預設方法與靜態方法
- c#通過反射動態執行類的例項及靜態方法C#反射
- 二維陣列傳參做形參陣列
- Java靜態變數在靜態方法內部無法改變值Java變數
- net 靜態方法與非靜態方法