Java基礎(chǔ)-final static

final

繼承的出現(xiàn)提高了代碼的復(fù)用性留晚,并方便開發(fā)。但隨之也有問題告嘲,有些類在描述完之后错维,不想被繼承,或者有些類中的部分方法功能是固定的橄唬,不想讓子類重寫赋焕。可是當(dāng)子類繼承了這些特殊類之后仰楚,就可以對其中的方法進(jìn)行重寫隆判,那怎么解決呢?
要解決上述的這些問題僧界,需要使用到一個關(guān)鍵字final侨嘀,final的意思為最終,不可變捂襟。final是個修飾符咬腕,它可以用來修飾類,類的成員葬荷,以及局部變量涨共。

  • final修飾類不可以被繼承,但是可以繼承其他類宠漩。
class Yy {}
final class Fu extends Yy{} //可以繼承Yy類
class Zi extends Fu{} //不能繼承Fu類
  • final修飾的方法不可以被覆蓋,但父類中沒有被final修飾方法举反,子類覆蓋后可以加final。
class Fu {
    // final修飾的方法扒吁,不可以被覆蓋火鼻,但可以繼承使用
    public final void method1(){}
    public void method2(){}
}
class Zi extends Fu {
    //重寫method2方法
    public final void method2(){}
}
  • final修飾的變量稱為常量,這些變量只能賦值一次雕崩。
    final int i = 20;
    i = 30; //賦值報錯魁索,final修飾的變量只能賦值一次

  • 引用類型的變量值為對象地址值,地址值不能更改晨逝,但是地址內(nèi)的對象屬性值可以修改。

final Person p = new Person();
Person p2 = new Person();
p = p2; //final修飾的變量p懦铺,所記錄的地址值不能改變
p.name = "小明";//可以更改p對象中name屬性值
p不能為別的對象捉貌,而p對象中的name或age屬性值可更改。
  • 修飾成員變量,需要在創(chuàng)建對象前賦值趁窃,否則報錯牧挣。(當(dāng)沒有顯式賦值時,多個構(gòu)造方法的均需要為其賦值醒陆。)
class Demo {
    //直接賦值
    final int m = 100;
    
    //final修飾的成員變量瀑构,需要在創(chuàng)建對象前賦值,否則報錯刨摩。
    final int n; 
    public Demo(){
        //可以在創(chuàng)建對象時所調(diào)用的構(gòu)造方法中寺晌,為變量n賦值
        n = 2016;
    }
}
static

當(dāng)在定義類的時候,類中都會有相應(yīng)的屬性和方法澡刹。而屬性和方法都是通過創(chuàng)建本類對象調(diào)用的呻征。當(dāng)在調(diào)用對象的某個方法時,這個方法沒有訪問到對象的特有數(shù)據(jù)時罢浇,方法創(chuàng)建這個對象有些多余陆赋。可是不創(chuàng)建對象嚷闭,方法又調(diào)用不了攒岛,這時就會想,那么我們能不能不創(chuàng)建對象胞锰,就可以調(diào)用方法呢灾锯?

可以的,我們可以通過static關(guān)鍵字來實(shí)現(xiàn)胜蛉。static它是靜態(tài)修飾符挠进,一般用來修飾類中的成員。

static 特點(diǎn)
  • 被static修飾的成員變量屬于類誊册,不屬于這個類的某個對象领突。(也就是說,多個對象在訪問或修改static修飾的成員變量時案怯,其中一個對象將static成員變量值進(jìn)行了修改君旦,其他對象中的static成員變量值跟著改變,即多個對象共享同一個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修飾的成員可以并且建議通過類名直接訪問嘲碱。
    訪問靜態(tài)成員的格式:
    類名.靜態(tài)成員變量名
    類名.靜態(tài)成員方法名(參數(shù))
    對象名.靜態(tài)成員變量名 ------不建議使用該方式金砍,會出現(xiàn)警告
    對象名.靜態(tài)成員方法名(參數(shù)) ------不建議使用該方式,會出現(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();
    }
}
static注意事項(xiàng)
  • 靜態(tài)內(nèi)容是優(yōu)先于對象存在麦锯,只能訪問靜態(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);
    }
}
  • 同一個類中千扶,靜態(tài)成員只能訪問靜態(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)方法中,只能訪問靜態(tài)成員變量或靜態(tài)成員方法
        System.out.println(count);
    }
}
  • main方法為靜態(tài)方法僅僅為程序執(zhí)行入口骆捧,它不屬于任何一個對象澎羞,可以定義在任意類中。
定義靜態(tài)常量

開發(fā)中敛苇,我們想在類中定義一個靜態(tài)常量妆绞,通常使用public static final修飾的變量來完成定義。此時變量名用全部大寫枫攀,多個單詞使用下劃線連接括饶。
定義格式:
public static final 數(shù)據(jù)類型 變量名 = 值;
如下演示:

class Company {
    public static final String YUTOU = "芋頭";
    public static void method(){
        System.out.println("一個靜態(tài)方法");
    }
}

當(dāng)我們想使用類的靜態(tài)成員時,不需要創(chuàng)建對象脓豪,直接使用類名來訪問即可巷帝。

System.out.println(Company.YUTOU); //打印芋頭
Company.method(); // 調(diào)用一個靜態(tài)方法
  • 注意:
    接口中的每個成員變量都默認(rèn)使用public static final修飾。
    所有接口中的成員變量已是靜態(tài)常量扫夜,由于接口沒有構(gòu)造方法楞泼,所以必須顯示賦值◇源常可以直接用接口名訪問堕阔。
interface Inter {
    public static final int COUNT = 100;
}
    訪問接口中的靜態(tài)變量
Inter.COUNT
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市颗味,隨后出現(xiàn)的幾起案子超陆,更是在濱河造成了極大的恐慌,老刑警劉巖浦马,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件时呀,死亡現(xiàn)場離奇詭異,居然都是意外死亡晶默,警方通過查閱死者的電腦和手機(jī)谨娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磺陡,“玉大人趴梢,你說我怎么就攤上這事”宜” “怎么了坞靶?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝴悉。 經(jīng)常有香客問我彰阴,道長,這世上最難降的妖魔是什么拍冠? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任尿这,我火速辦了婚禮廉丽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妻味。我一直安慰自己,他們只是感情好欣福,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布责球。 她就那樣靜靜地躺著,像睡著了一般拓劝。 火紅的嫁衣襯著肌膚如雪雏逾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天郑临,我揣著相機(jī)與錄音栖博,去河邊找鬼。 笑死厢洞,一個胖子當(dāng)著我的面吹牛仇让,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躺翻,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼丧叽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了公你?” 一聲冷哼從身側(cè)響起踊淳,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陕靠,沒想到半個月后迂尝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剪芥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年垄开,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粗俱。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡说榆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寸认,到底是詐尸還是另有隱情签财,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布偏塞,位于F島的核電站唱蒸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灸叼。R本人自食惡果不足惜神汹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一庆捺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屁魏,春花似錦滔以、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桃漾,卻和暖如春坏匪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撬统。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工适滓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恋追。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓凭迹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苦囱。 傳聞我的和親對象是個殘疾皇子蕊苗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法沿彭,內(nèi)部類的語法朽砰,繼承相關(guān)的語法,異常的語法喉刘,線程的語...
    子非魚_t_閱讀 31,622評論 18 399
  • 一:java概述:1瞧柔,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境睦裳,java的開發(fā)工...
    ZaneInTheSun閱讀 2,649評論 0 11
  • Win7下如何打開DOS控制臺造锅? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,595評論 4 12
  • 1、.java源文件: 一個以”.java“為后綴的源文件:只能有一個與文件名相同的類廉邑,可以包含其他類哥蔚。 2、類方...
    Hughman閱讀 1,466評論 1 9
  • final 被final聲明的屬性其值通常是不可修改的蛛蒙,所以只有g(shù)et方法糙箍,沒有set方法。并且變量要大寫牵祟,如下:...
    silingling閱讀 269評論 0 0