用于修飾成員變量和成員函數(shù)
隨著類的加載而加載
優(yōu)先于對(duì)象存在
被所有對(duì)象所共享
可以直接被類名調(diào)用
靜態(tài)方法只能訪問(wèn)靜態(tài)成員;非靜態(tài)方法也可以訪問(wèn)靜態(tài)成員
靜態(tài)方法中不可以寫(xiě)this,super關(guān)鍵字
主函數(shù)是靜態(tài)的
成員變量隨著對(duì)象的創(chuàng)建而存在,隨著對(duì)象的回收而釋放;
靜態(tài)變量隨著類的加載而存在隨著類的消失而消失
2. 調(diào)用方式不同
成員變量只能被對(duì)象調(diào)用
靜態(tài)變量能被對(duì)象調(diào)用也能被類名調(diào)用(一般建議使用類名調(diào)用)
3. 別名不同
成員變量也叫實(shí)例變量
靜態(tài)變量也叫類變量
4. 數(shù)據(jù)的存儲(chǔ)位置不同
成員變量數(shù)據(jù)存儲(chǔ)在堆內(nèi)存中的對(duì)象中,所以是對(duì)象的特有數(shù)據(jù)
靜態(tài)變量數(shù)據(jù)存儲(chǔ)在方法區(qū)(數(shù)據(jù)區(qū)或共享數(shù)據(jù)區(qū))的靜態(tài)區(qū)中,所以也叫對(duì)象的共享數(shù)據(jù)
以下代碼在內(nèi)存中的執(zhí)行:
class Person{ PRivate String name; private int age; static String country = "CN"; public Person(String name, int age){ this.name = name; this.age = age; } public void show(){ System.out.println(Person.country+":"+this.name+":"+this.age); } public static void method(){ System.out.println(Person.country); }}class StaticDemo2{ public static void main(String[] args){ Person.method(); Person p = new Person("java",20); p.show(); }}
內(nèi)存圖解為:

說(shuō)明:
static { System.out.println("這是靜態(tài)代碼塊");}
1.靜態(tài)代碼塊
隨著類的加載而執(zhí)行,并且執(zhí)行一次。屬于類。
2.作用
用于給類進(jìn)行初始化。比如像javaAPI提供的Math類,全部為靜態(tài)的方法,不允許創(chuàng)建對(duì)象,這個(gè)時(shí)候不能用構(gòu)造 函數(shù)進(jìn)行初始化,因?yàn)闃?gòu)造函數(shù)一般是給對(duì)象初始化,不能創(chuàng)建對(duì)象時(shí)不可使用。所以就要使用靜態(tài)代碼塊來(lái)進(jìn)行一些初始化的操作。
不同于靜態(tài)代碼塊,是屬于類的代碼塊,如:
class Demo{ { System.out.println("這是構(gòu)造代碼塊"); }
//。。。}和對(duì)象有關(guān)
可以給所有對(duì)象進(jìn)行初始化,構(gòu)造函數(shù)是給對(duì)應(yīng)的對(duì)象進(jìn)行針對(duì)性的初始化。
每次創(chuàng)建對(duì)象時(shí)都會(huì)執(zhí)行。靜態(tài)代碼塊是在類加載時(shí)執(zhí)行一次。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注