更新時間:2020-11-18 17:20:34 來源:動力節點 瀏覽1396次
static是java語言中的關鍵字,表示“靜態的”,它可以用來修飾變量、方法、代碼塊等,修飾的變量叫做靜態變量,修飾的方法叫做靜態方法,修飾的代碼塊叫做靜態代碼塊。在java語言中凡是用static修飾的都是類相關的,不需要創建對象,直接通過“類名”即可訪問,即使使用“引用”去訪問,在運行的時候也和堆內存當中的對象無關。本文主要來解析一下static關鍵字的深層原理。
要理解static關鍵字為什么會有上面的特性,首先我們還需要從jvm內存說起。我們先給出一張java的內存結構圖,然后通過案例描述一下static修飾的變量的存放位置。
從上圖我們可以發現,靜態變量存放在方法區中,并且是被所有線程所共享的。這里要說一下java堆,java堆存放的就是我們創建的一個個實例變量。
下面通過一個案例說明一下,從內存的角度來看,static關鍵字為什么會有這樣的特性。
首先我們定義一個類
public class Person {
//靜態變量
static String firstName;
String lastName;
public void showName(){
System.out.println(firstName+lastName);
}
//靜態方法
public static void viewName(){
System.out.println(firstName);
}
public static void main(String[] args) {
Person p =new Person();
Person.firstName = "小";
p.lastName="明";
p.showName();
Person p2 =new Person();
Person.firstName="阿";
p2.lastName="麗";
p2.showName();
}
}
//輸出。小明、阿麗
接下來我們從內存的角度出發,可以看出我們的方法在調用的時候,是從方法區調用的,但是堆內存不一樣,堆內存中的成員變量lastname是隨著對象的產生而產生。隨著對象的消失而消失。靜態變量是所有線程共享的,所以不會消失。這也就能解釋上面static關鍵字的真正原因。
我們在使用使用static關鍵字時需要注意:
最后,我們看完了本文對static關鍵字的解析如果還有什么不明白的地方可以觀看本站的Java SE教程,里面對static關鍵字的講解更加全面透徹,讓你從無到有,快速掌握static關鍵字。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習