Java靜態(tài)static與實(shí)例instance方法示例
靜態(tài)
靜態(tài)定義
在Java語(yǔ)言中,static表示“靜態(tài)”,可以用來(lái)修飾成員變量和成員方法,也可以是靜態(tài)代碼塊。
在Java語(yǔ)言中,使用 static 修飾符修飾的屬性和方法稱(chēng)為靜態(tài)變量和靜態(tài)方法,稱(chēng)為靜態(tài)成員,歸整個(gè)類(lèi)所有,不依賴(lài)于類(lèi)的任意一個(gè)實(shí)例,被類(lèi)的所有實(shí)例共享。
格式:
修飾變量:static 數(shù)據(jù)類(lèi)型 變量名
修飾方法:[訪(fǎng)問(wèn)權(quán)限修飾符] static 方法返回值 方法名(參數(shù)列表){ 方法體 }
靜態(tài)代碼塊:static { 語(yǔ)句體 }
靜態(tài)變量
靜態(tài)變量(或稱(chēng)為類(lèi)變量),指被 static 修飾的成員變量
靜態(tài)變量在類(lèi)中的作用如下:
靜態(tài)變量在類(lèi)中被類(lèi)的所有實(shí)例共享,作為實(shí)例之間的共享數(shù)據(jù),可以增加實(shí)例之間的交互性,節(jié)省內(nèi)存空間。
靜態(tài)變量在類(lèi)中的定義與存儲(chǔ):
程序運(yùn)行時(shí),在第一次加載類(lèi)的過(guò)程中完成靜態(tài)變量的內(nèi)存分配,Java 虛擬機(jī)只為靜態(tài)變量分配一次內(nèi)存,分配在方法區(qū)中,常駐內(nèi)存。
靜態(tài)變量調(diào)用:
在類(lèi)的內(nèi)部,可以在任何方法內(nèi)直接訪(fǎng)問(wèn)靜態(tài)變量;在其他類(lèi)中,可以通過(guò)類(lèi)名訪(fǎng)問(wèn)該類(lèi)中的靜態(tài)變量。
示例:
public class StaticVar { public static String str1 = "Hello";//定義靜態(tài)變量 public static void main(String[] args) { // 直接訪(fǎng)問(wèn)str1 System.out.println("第 1 次訪(fǎng)問(wèn)靜態(tài)變量,結(jié)果為:"+str1); // 通過(guò)類(lèi)名訪(fǎng)問(wèn)str1 System.out.println("第 2 次訪(fǎng)問(wèn)靜態(tài)變量,結(jié)果為:"+StaticVar.str1); //通過(guò)對(duì)象名訪(fǎng)問(wèn)str1 StaticVar staticVar =new StaticVar(); System.out.println("第 3 次訪(fǎng)問(wèn)靜態(tài)變量,結(jié)果為:"+staticVar.str1); } }
運(yùn)行結(jié)果:
第 1 次訪(fǎng)問(wèn)靜態(tài)變量,結(jié)果為:Hello
第 2 次訪(fǎng)問(wèn)靜態(tài)變量,結(jié)果為:Hello
第 3 次訪(fǎng)問(wèn)靜態(tài)變量,結(jié)果為:Hello
靜態(tài)方法
靜態(tài)方法(或稱(chēng)為類(lèi)方法),指被 static 修飾的成員方法
靜態(tài)方法在類(lèi)中的內(nèi)存裝載:
靜態(tài)方法會(huì)隨著類(lèi)的定義而被分配和裝載入內(nèi)存中;
靜態(tài)方法的調(diào)用:
方式1:通過(guò)類(lèi)名調(diào)用靜態(tài)方法;
方式2:通過(guò)對(duì)象名調(diào)用方法,但是不推薦。
靜態(tài)方法注意事項(xiàng):靜態(tài)方法中不能使用 this 關(guān)鍵字,不能直接訪(fǎng)問(wèn)所屬類(lèi)的實(shí)例變量和實(shí)例方法,但可以直接訪(fǎng)問(wèn)所屬類(lèi)的靜態(tài)變量和靜態(tài)方法。
示例:
public class StaticVar { public static String str1 = "Hello";//定義靜態(tài)變量 public static void print(){ System.out.println("調(diào)用靜態(tài)方法"); } public static void main(String[] args) { // 直接調(diào)用 print(); // 通過(guò)類(lèi)名調(diào)用 StaticVar.print(); //通過(guò)對(duì)象名調(diào)用 StaticVar staticVar =new StaticVar(); staticVar.print(); } }
運(yùn)行結(jié)果:
調(diào)用靜態(tài)方法
調(diào)用靜態(tài)方法
調(diào)用靜態(tài)方法
靜態(tài)塊
Java 類(lèi)中的 static{} 代碼塊,主要用于初始化類(lèi),為類(lèi)的靜態(tài)變量賦初始值和其他作用。
靜態(tài)塊在類(lèi)中的調(diào)用:
靜態(tài)塊會(huì)在類(lèi)的定義,靜態(tài)變量分配內(nèi)存之后運(yùn)行,且只運(yùn)行一次,如果類(lèi)中包含多個(gè)靜態(tài)代碼塊,則 Java 虛擬機(jī)將按它們?cè)陬?lèi)中出現(xiàn)的順序依次執(zhí)行它們。
示例:
public class StaticVar { public static String str1 ;//靜態(tài)變量 //靜態(tài)塊:為靜態(tài)變量賦值 static { str1 = "hallo"; } public static void main(String[] args) { System.out.println(StaticVar.str1);//首次運(yùn)行類(lèi) } }
運(yùn)行結(jié)果:
hallo
實(shí)例
定義:
實(shí)例就是對(duì)象,通過(guò)類(lèi)實(shí)例化出來(lái)的結(jié)果,每一個(gè)對(duì)象在內(nèi)存中具備獨(dú)立的內(nèi)存空間,每個(gè)對(duì)象之間互不影響。
實(shí)例變量
沒(méi)有被 static 修飾的成員變量。
實(shí)例變量在類(lèi)中的定義與存儲(chǔ):
每實(shí)例化一個(gè)對(duì)象,Java虛擬機(jī)就會(huì)給實(shí)例變量在內(nèi)存中分配空間,隨著對(duì)象存亡,而存亡。
實(shí)例變量的調(diào)用:
在類(lèi)的內(nèi)部,任何非靜態(tài)方法內(nèi)可以直接訪(fǎng)問(wèn)實(shí)例變量;在其他類(lèi)中,可以通過(guò)對(duì)象訪(fǎng)問(wèn)實(shí)例變量。
示例:
public class StaticVar { public String str1 ;//實(shí)例變量 StaticVar(String str1){}{//構(gòu)造方法,為實(shí)例變量賦值 this.str1=str1; } public static void main(String[] args) { StaticVar staticVar= new StaticVar("hhhh");//實(shí)例化對(duì)象 System.out.println( staticVar.str1);//對(duì)象名訪(fǎng)問(wèn) } }
運(yùn)行結(jié)果:
hhhh
實(shí)例方法
沒(méi)有被 static 修飾的成員方法
實(shí)例方法在類(lèi)中的內(nèi)存裝載:
實(shí)例方法會(huì)隨著對(duì)象的實(shí)例化而被分配和裝載入內(nèi)存中;
實(shí)例方法的調(diào)用:
通過(guò)對(duì)象名調(diào)用方法,在實(shí)例方法中可以直接訪(fǎng)問(wèn)所屬類(lèi)的靜態(tài)變量、靜態(tài)方法、實(shí)例變量和實(shí)例方法。
示例:
public class StaticVar { String name; public StaticVar(String name) { this.name = name; } public void print(String name) { System.out.println(name); } public static void main(String[] args) { StaticVar staticVar=new StaticVar("實(shí)例方法"); staticVar.print(staticVar.name); } }
運(yùn)行結(jié)果:
實(shí)例方法
靜態(tài)與實(shí)例區(qū)別
1、調(diào)用方式:
調(diào)用靜態(tài)方法時(shí),可以使用 類(lèi)名.方法名 的方式,也可以使用 對(duì)象.方法名 的方式,而實(shí)例方法只有 對(duì)象.方法名 這種方式。
2、訪(fǎng)問(wèn)類(lèi)成員是否存在限制:
靜態(tài)方法在訪(fǎng)問(wèn)本類(lèi)的成員時(shí),只允許訪(fǎng)問(wèn)靜態(tài)成員,不允許訪(fǎng)問(wèn)實(shí)例成員,而實(shí)例方法允許訪(fǎng)問(wèn)靜態(tài)成員和實(shí)例成員。
3.分配內(nèi)存:
實(shí)例變量是在實(shí)例化對(duì)象時(shí)在堆中分配內(nèi)存的,并且new一次就分配一次內(nèi)存,靜態(tài)變量被分配在方法區(qū)中,常駐內(nèi)存,靜態(tài)變量只有一份。構(gòu)造函數(shù)可以為實(shí)例屬性初始化。構(gòu)造函數(shù)不會(huì)為靜態(tài)屬性初始化。
以上就是Java靜態(tài)static與實(shí)例instance方法示例的詳細(xì)內(nèi)容,更多關(guān)于Java靜態(tài)static實(shí)例instance的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實(shí)現(xiàn)動(dòng)態(tài)獲取圖片驗(yàn)證碼的示例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)動(dòng)態(tài)獲取圖片驗(yàn)證碼的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行
這篇文章主要介紹了springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Spring項(xiàng)目中swagger用法與swagger-ui使用
這篇文章主要介紹了Spring項(xiàng)目中swagger用法與swagger-ui使用,通過(guò)圖文并茂的形式給大家介紹了編寫(xiě)springboot項(xiàng)目的方法及導(dǎo)入spring-fox依賴(lài)的代碼詳解,需要的朋友可以參考下2021-05-05SpringBoot項(xiàng)目引入MCP的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot項(xiàng)目引入MCP的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04IDEA新UI如何移動(dòng)類(lèi)路徑工具欄到頂部
文章介紹了IDEA更新新UI后,類(lèi)路徑工具欄放到底部的問(wèn)題,并提供了解決方案,此外,還提到了如何關(guān)閉主菜單背景色的方法2025-01-01