Kotlin入門(一):變量的聲明和使用



變量聲明

  • 只讀變量
    可理解為Java中常量辞州,使用 val 關(guān)鍵字修飾
val a: Int = 1  //在聲明的時候直接賦值
val b = 2   // 類型是明確的,變量類型Int可省去
val c: Int  // 在聲明時沒有賦值氯材,變量類型Int不可省去
c = 3       // 只可賦值一次甸私,此后c值不能再變
  • 易變變量
    可理解為Java中的普通變量诚些,用 var 關(guān)鍵字修飾,與 val 變量的區(qū)別是變量的值可變:
var a=0
a=1
a=3
  • 成員變量
    與Java一樣皇型,通過對象.變量名的方式調(diào)用:
fun main(args: Array<String>) {
    print(Test().property)
}

class Test{
    var property="property"
}
  • 靜態(tài)變量
    用companion object{}包裹诬烹,與Java一樣通過類名.變量名的方式調(diào)用,關(guān)于companion object后面會詳細講解:
fun main(args: Array<String>) {
    print(Test.com)
}

class Test{
    companion object{
        var com="com"
    }
}

  • 頂級變量
    在類的外部聲明犀被,可理解為Java中的靜態(tài)成員變量椅您。
    通過包名.變量名的方式來調(diào)用
    樣例:
package a.b.c
var top = "top"
fun main(args: Array<String>) {
    print(a.b.c.top)
}
  • 靜態(tài)變量與頂級變量的區(qū)別:
    通過反編譯可以知道寡键,其實他們不在一個類中。
    當文件中有頂級變量西轩,編譯時會新生成一個[文件名+kt]的類脑沿,頂級變量就在其中藕畔。

Getters and Setters

我們先定義各種可見性的var類型成員變量:

    private var privateField = ""
    internal var internalField = ""
    protected var protectedField = ""
    var publicField = ""

然后反編譯看看對應的java代碼:

   @NotNull
   public final String getInternalField$app() {
      return this.internalField;
   }

   public final void setInternalField$app(@NotNull String var1) {
      Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
      this.internalField = var1;
   }

   @NotNull
   protected final String getProtectedField() {
      return this.protectedField;
   }

   protected final void setProtectedField(@NotNull String var1) {
      Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
      this.protectedField = var1;
   }

   @NotNull
   public final String getPublicField() {
      return this.publicField;
   }

   public final void setPublicField(@NotNull String var1) {
      Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
      this.publicField = var1;
   }

可知,protected和public會生成對應的setter和getter方法庄拇,internal也生成了特殊的對應方法。
所以對于protected和public的成員變量措近,我們不能自己創(chuàng)建對應的getter和setter方法,如:

var name:String?
fun setName(name:String){}

將會報錯:

Platform declaration clash: The following declarations have the same JVM signature (setName(Ljava/lang/String;)V)


  • Visibility Modifiers
    對于getter
    getter的可見性和變量的可見性相同瞭郑,無需重復添加修飾符辜御。非要多此一舉添加,如果和變量的修飾符不一樣屈张,將會報錯擒权,如:
var field: String = ""
private get  //報錯: Getter visibility must be the same as property visibility
  • 對于setter
    setter的可見性必須小于等于變量自身的可見性,否則報錯碳抄,如:
private var name=""
public set //error:Setter visibility must be the same or less permissive than property visibility



我們也可以自定義getter和setter方法

  • 語法
<var <propertyName>[: <PropertyType>] [= <property_initializer>]
    [<getter>]
    [<setter>]

當給變量賦值時會調(diào)用setter方法,調(diào)用變量得到的是getter中的返回值
樣例:

var name: String = "111"
    get() {
        return "{$field}"
    }
    set(value) {
        field = "[$value]"
    }

fun main(args: Array<String>) {
    println(name)
    name = "222"
    print(name)
}

結(jié)果:

{111}
{[222]}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俺夕,一起剝皮案震驚了整個濱河市贱鄙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌逗宁,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件件甥,死亡現(xiàn)場離奇詭異哼拔,居然都是意外死亡,警方通過查閱死者的電腦和手機倦逐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曾我,“玉大人健民,你說我怎么就攤上這事”蹋” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵型诚,是天一觀的道長筑辨。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么暮现? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任栖袋,我火速辦了婚禮拍顷,結(jié)果婚禮上塘幅,老公的妹妹穿的比我還像新娘昔案。我一直安慰自己电媳,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布捞稿。 她就那樣靜靜地躺著拼缝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咧七。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天耻涛,我揣著相機與錄音穴翩,去河邊找鬼犬第。 笑死芒帕,一個胖子當著我的面吹牛丰介,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哮幢,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼橙垢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柜某?” 一聲冷哼從身側(cè)響起敛纲,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤剂癌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佩谷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡抡谐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年桐猬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厦坛。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡乍惊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出润绎,到底是詐尸還是另有隱情,我是刑警寧澤莉撇,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布棍郎,位于F島的核電站其障,受9級特大地震影響涂佃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辜荠,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一伯病、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦惭蟋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氨肌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怎囚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工考婴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留催烘,地道東北人沥阱。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓考杉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親崇棠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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

  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的!及老! 因為Scala是基于Java虛擬機,也就是...
    燈火gg閱讀 3,424評論 1 24
  • 前言 人生苦多,快來 Kotlin 匕垫,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,161評論 9 118
  • 一斟叼、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,160評論 1 44
  • 目標:不停追求(卓)春寿、不斷翱翔(菲 ) 雨 放學練舞蹈 晚上完成了畫 哪個姑娘不喜歡光彩照人? ——沒有绑改,其實我也...
    逆風追夢人閱讀 143評論 0 0
  • 一個人的時候厘线, 走走停停识腿, 賞花時想你造壮, 望月時想你, 水中都是你, 仿若你就在我身邊耳璧,這感覺就像你不在我身邊,身...
    無涯荒野_閱讀 272評論 2 1