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

