static關(guān)鍵字
2.1 static概念
當(dāng)在定義類的時(shí)候涡尘,類中都會(huì)有相應(yīng)的屬性和方法。而屬性和方法都是通過(guò)創(chuàng)建本類對(duì)象調(diào)用的。當(dāng)在調(diào)用對(duì)象的某個(gè)方法時(shí)晶府,這個(gè)方法沒(méi)有訪問(wèn)到對(duì)象的特有數(shù)據(jù)時(shí)扎谎,方法創(chuàng)建這個(gè)對(duì)象有些多余碳想。可是不創(chuàng)建對(duì)象毁靶,方法又調(diào)用不了胧奔,這時(shí)就會(huì)想,那么我們能不能不創(chuàng)建對(duì)象预吆,就可以調(diào)用方法呢龙填?
可以的,我們可以通過(guò)static關(guān)鍵字來(lái)實(shí)現(xiàn)拐叉。static它是靜態(tài)修飾符岩遗,一般用來(lái)修飾類中的成員。
2.2 static特點(diǎn)
? 被static修飾的成員變量屬于類凤瘦,不屬于這個(gè)類的某個(gè)對(duì)象宿礁。(也就是說(shuō),多個(gè)對(duì)象在訪問(wèn)或修改static修飾的成員變量時(shí)廷粒,其中一個(gè)對(duì)象將static成員變量值進(jìn)行了修改窘拯,其他對(duì)象中的static成員變量值跟著改變,即多個(gè)對(duì)象共享同一個(gè)static成員變量)
代碼演示:
class Demo {
public static int num = 100;
}
class Test {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
d1.num = 200;
System.out.println(d1.num); //結(jié)果為200
System.out.println(d2.num); //結(jié)果為200
}
}
? 被static修飾的成員可以并且建議通過(guò)類名直接訪問(wèn)坝茎。
訪問(wèn)靜態(tài)成員的格式:
類名.靜態(tài)成員變量名
類名.靜態(tài)成員方法名(參數(shù))
對(duì)象名.靜態(tài)成員變量名 ------不建議使用該方式涤姊,會(huì)出現(xiàn)警告
對(duì)象名.靜態(tài)成員方法名(參數(shù)) ------不建議使用該方式,會(huì)出現(xiàn)警告
代碼演示:
class Demo {
//靜態(tài)成員變量
public static int num = 100;
//靜態(tài)方法
public static void method(){
System.out.println("靜態(tài)方法");
}
}
class Test {
public static void main(String[] args) {
System.out.println(Demo.num);
Demo.method();
}
}
2.3 static注意事項(xiàng)
? 靜態(tài)內(nèi)容是優(yōu)先于對(duì)象存在嗤放,只能訪問(wèn)靜態(tài)思喊,不能使用this/super。靜態(tài)修飾的內(nèi)容存于靜態(tài)區(qū)次酌。
class Demo {
//成員變量
public int num = 100;
//靜態(tài)方法
public static void method(){
//this.num; 不能使用this/super恨课。
System.out.println(this.num);
}
}
? 同一個(gè)類中舆乔,靜態(tài)成員只能訪問(wèn)靜態(tài)成員
class Demo {
//成員變量
public int num = 100;
//靜態(tài)成員變量
public static int count = 200;
//靜態(tài)方法
public static void method(){
//System.out.println(num); 靜態(tài)方法中,只能訪問(wèn)靜態(tài)成員變量或靜態(tài)成員方法
System.out.println(count);
}
}
? main方法為靜態(tài)方法僅僅為程序執(zhí)行入口,它不屬于任何一個(gè)對(duì)象错览,可以定義在任意類中狞洋。
2.4 定義靜態(tài)常量
開(kāi)發(fā)中,我們想在類中定義一個(gè)靜態(tài)常量颜武,通常使用public static final修飾的變量來(lái)完成定義。此時(shí)變量名用全部大寫(xiě)拖吼,多個(gè)單詞使用下劃線連接鳞上。
定義格式:
public static final 數(shù)據(jù)類型 變量名 = 值;
如下演示:
class Company {
public static final String COMPANY_NAME = "傳智播客";
public static void method(){
System.out.println("一個(gè)靜態(tài)方法");
}
}
當(dāng)我們想使用類的靜態(tài)成員時(shí),不需要?jiǎng)?chuàng)建對(duì)象吊档,直接使用類名來(lái)訪問(wèn)即可篙议。
System.out.println(Company.COMPANY_NAME); //打印傳智播客
Company.method(); // 調(diào)用一個(gè)靜態(tài)方法
? 注意:
接口中的每個(gè)成員變量都默認(rèn)使用public static final修飾。
所有接口中的成員變量已是靜態(tài)常量怠硼,由于接口沒(méi)有構(gòu)造方法鬼贱,所以必須顯示賦值【苊可以直接用接口名訪問(wèn)吩愧。
interface Inter {
public static final int COUNT = 100;
}
訪問(wèn)接口中的靜態(tài)變量
Inter.COUNT