Java 中 field 和 variable 區(qū)別及相關(guān)術(shù)語解釋

這是一個(gè)以前從沒仔細(xì)想過的問題——最近在閱讀Java Puzzlers摧阅,發(fā)現(xiàn)其大量使用了“域”這個(gè)詞汰蓉,這個(gè)詞個(gè)人很少見到,在這本書中倒是時(shí)常出現(xiàn)棒卷,所以在好奇心的驅(qū)使下搜索了一下相關(guān)的內(nèi)容顾孽,順便復(fù)習(xí)了一下基礎(chǔ)祝钢,最后整理如下。

先說一下 field 和 variable 之間的區(qū)別:

class variables and instance variables are fields while local variables and parameter variables are not. All fields are variables.

成員變量(field)是指類的數(shù)據(jù)成員若厚,而方法內(nèi)部的局部變量(local variable)拦英、參數(shù)變量(parameter variable)不能稱作 field。field 屬于 variable测秸,也就是說 variable 的范圍更大疤估。

術(shù)語解釋:

  1. 域或字段、實(shí)例變量霎冯、成員變量(field, instance variable, member variable, non-static field)

    field: A data member of a class. Unless specified otherwise, a field is not static.

    • 非 static 修飾的變量铃拇。
    • 雖然有如上定義,但是一般在使用時(shí)沈撞,成員變量(field)包括 instance variable 和 class variable慷荔。為了區(qū)分,個(gè)人認(rèn)為缠俺,用實(shí)例變量/非靜態(tài)變量(instance variable / non-static field)描述上面的定義更佳显晶。
    • 成員變量與特定的對象相關(guān)聯(lián),只能通過對象(new 出)訪問壹士。
    • 聲明在類中吧碾,但不在方法或構(gòu)造方法中。
    • 如果有多個(gè)對象的實(shí)例墓卦,則每一個(gè)實(shí)例都會(huì)持有一份成員變量倦春,實(shí)例之間不共享成員變量的數(shù)據(jù)。
    • 作用域比靜態(tài)變量小落剪,可以在類中或者非靜態(tài)方法中使用以及通過生成實(shí)例對象使用睁本。(訪問限制則不可用)
    • JVM 在初始化類的時(shí)候會(huì)給成員變量賦初始值。

    Example:

    public class FieldTest  {
        private int xValue; // xValue is a field
    
        public void showX() {
            System.out.println("X is: " + xValue);
        }
    }
    
  2. 類字段忠怖、靜態(tài)字段呢堰、靜態(tài)變量(class variable, static field, staic variable)

    • 使用 static 修飾的字段,一般叫做靜態(tài)變量凡泣。
    • 聲明在類中枉疼,但不在方法或構(gòu)造方法中。
    • 多個(gè)實(shí)例對象共享一份靜態(tài)變量
    • JVM在準(zhǔn)備類的時(shí)候會(huì)給靜態(tài)變量賦初始值鞋拟。
    • 作用域最大骂维,類中都可以訪問,或通過 類名.變量名 的方式調(diào)用(訪問限制則不可用)贺纲。

    Example:

    System.out.println(Integer.MAX_VALUE);
    
  3. 局部變量(local variable)
    定義在一個(gè)區(qū)塊內(nèi)(通常會(huì)用大括號包裹)航闺,區(qū)塊外部無法使用的變量。

    • 定義在一個(gè)區(qū)塊內(nèi)(通常會(huì)用大括號包裹),沒有訪問修飾符潦刃,區(qū)塊外部無法使用的變量侮措。
    • 沒有默認(rèn)值,所以必須賦初始值
    • 生命周期即為方法的生命周期

    Example:

    if(x > 10) {
        String local = "Local value";
    }
    
  4. 參數(shù)(input parameter, parameter (variable), argument)

    這個(gè)就不多說了乖杠,要注意的是 argument 和 parameter 的區(qū)別(下文)分扎。
    另外,Oracle 官方文檔中將參數(shù)分為了構(gòu)造參數(shù)胧洒、方法參數(shù)和異常參數(shù)三部分畏吓。

    Example:

    public class Point {
    private int xValue;
        public Point(int x) {
            xValue = x;
       }
    
        public void setX(int x) {
            xValue = x;
        }
    }
    

    Strictly speaking, a parameter is a variable within the definition of a method. An argument would be the data or actual value which is passed to the method. An example of parameter usage: int numberAdder(first, second) An example of argument usage: numberAdder(4,2)

  5. 不可變量、常量(final variable, constant)
    即為使用 final 關(guān)鍵詞修飾的變量略荡。不可變量屬于成員變量。

  6. 成員(member)

    A field or method of a class. Unless specified otherwise, a member is not static.

    指的是類中非靜態(tài)的成員變量或方法歉胶。(用法同field)

  7. 屬性(property)

    Characteristics of an object that users can set, such as the color of a window.

    可以被用戶設(shè)置或獲取的對象特征即為屬性汛兜。
    POJO 或 JavaBean 中的成員變量也稱作屬性(具有set、getter方法)通今。

最后粥谬,總結(jié)一下國內(nèi)目前的慣用法(英文取其一,序號對應(yīng)上文):

  1. field -> 成員變量辫塌, instance variable / non-static field -> 實(shí)例變量/非靜態(tài)變量
  2. class variable -> 靜態(tài)變量
  3. local variable -> 本地變量
  4. input parameter -> 參數(shù)
  5. final variable -> 常量
  6. member -> 成員(用法同field)
  7. property -> 屬性

參考資料:

fields-vs-variables-in-java
http://docs.oracle.com/javase/tutorial/information/glossary.html
https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漏策,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子臼氨,更是在濱河造成了極大的恐慌掺喻,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件储矩,死亡現(xiàn)場離奇詭異感耙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)持隧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門即硼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人只酥,你說我怎么就攤上這事×言剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵叫胖,是天一觀的道長。 經(jīng)常有香客問我她奥,道長瓮增,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任绷跑,我火速辦了婚禮,結(jié)果婚禮上砸捏,老公的妹妹穿的比我還像新娘谬运。我一直安慰自己,他們只是感情好垦藏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布梆暖。 她就那樣靜靜地躺著掂骏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弟灼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天勤哗,我揣著相機(jī)與錄音掩驱,去河邊找鬼芒划。 笑死欧穴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的缴挖。 我是一名探鬼主播焚辅,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼同蜻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瘫析,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咸包,沒想到半個(gè)月后杖虾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烂瘫,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年坟比,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚷往。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡籍琳,死狀恐怖魂贬,靈堂內(nèi)的尸體忽然破棺而出巩割,到底是詐尸還是另有隱情付燥,我是刑警寧澤愈犹,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站勋颖,受9級特大地震影響勋锤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叁执,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望次哈。 院中可真熱鬧吆录,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至带斑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勋磕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工苦银, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赶站,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓想括,卻偏偏與公主長得像烙博,于是被迫代替她去往敵國和親瑟蜈。 傳聞我的和親對象是個(gè)殘疾皇子渣窜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

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