Kotlin入门(一):变量的声明和使用



变量声明

  • 只读变量
    可理解为Java中常量,使用 val 关键字修饰
val a: Int = 1  //在声明的时候直接赋值
val b = 2   // 类型是明确的,变量类型Int可省去
val c: Int  // 在声明时没有赋值,变量类型Int不可省去
c = 3       // 只可赋值一次,此后c值不能再变
  • 易变变量
    可理解为Java中的普通变量,用 var 关键字修饰,与 val 变量的区别是变量的值可变:
var a=0
a=1
a=3
  • 成员变量
    与Java一样,通过对象.变量名的方式调用:
fun main(args: Array<String>) {
    print(Test().property)
}

class Test{
    var property="property"
}
  • 静态变量
    用companion object{}包裹,与Java一样通过类名.变量名的方式调用,关于companion object后面会详细讲解:
fun main(args: Array<String>) {
    print(Test.com)
}

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

  • 顶级变量
    在类的外部声明,可理解为Java中的静态成员变量。
    通过包名.变量名的方式来调用
    样例:
package a.b.c
var top = "top"
fun main(args: Array<String>) {
    print(a.b.c.top)
}
  • 静态变量与顶级变量的区别:
    通过反编译可以知道,其实他们不在一个类中。
    当文件中有顶级变量,编译时会新生成一个[文件名+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的成员变量,我们不能自己创建对应的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>]

当给变量赋值时会调用setter方法,调用变量得到的是getter中的返回值
样例:

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

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

结果:

{111}
{[222]}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,444评论 1 24
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,209评论 9 118
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,186评论 1 44
  • 目标:不停追求(卓)、不断翱翔(菲 ) 雨 放学练舞蹈 晚上完成了画 哪个姑娘不喜欢光彩照人? ——没有,其实我也...
    逆风追梦人阅读 145评论 0 0
  • 一个人的时候, 走走停停, 赏花时想你, 望月时想你, 水中都是你, 仿若你就在我身边,这感觉就像你不在我身边,身...
    无涯荒野_阅读 274评论 2 1