Kotlin学习系列----定义变量及基本属性

Kotlin官网: https://kotlinlang.org/
Kotlin的中文文档: http://www.kotlindoc.cn/
kotlin官方中文翻译文档网址(这个翻译较准确):https://www.kotlincn.net/docs/reference/
知乎上看到的一篇视频教学地址:https://zhuanlan.zhihu.com/p/23101437

由于最近几天工作量不大(其实就是闲(lll¬ω¬)),于是继续鼓捣Kotlin,今天来和大家分享下使用Kotlin后遇到的一些不同。

首先来说变量

我们先定义几个变量看看:

var name = "皮小智"           //等价于 String name = "皮小智";
var age = 0                  //等价于 int age = 0;
var sex : String ?= null     //等价于 String sex;

上面代码相信对比注释看都能看懂,就是定义了姓名,年龄,性别3个变量而已。然而给我最不习惯的并不是不需要定义变量类型(String,int之类),直接通用var,而是句尾不需要“;”。我自己写的时候经常就在句尾加上个“;”,虽然Android studio没有报错,但是“;”变灰了,感觉就是哪里不对似的(有点小强迫症(⊙o⊙)?)。

var(变量)val(常量)的区别:

//var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和Java中声明变量的方式一样。
var name = "pixiaozhi"  
println(name)  
name = "皮小智"  
println(name)  

//val是一个只读变量(常量),这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。
val finalValue = "我是不可改变的";  
println(finalValue);  

看文档的同学应该都咯看到Kotlin有空安全,正确写法就是上面定义性别sex变量写法。让我们接着看有什么需要注意

var nullable : String ? = null
val non_Nullable: String = "pixiaozhi"

nullable = null //编译通过        
non_Nullable= null //编译错误

val nullable_l = nullable .length  //正确:我先看的中文翻译文档例子中是length()方法,实际中没有这个方法,
                  //然后去打开官方文档看这里是length而不是length(),/(ㄒoㄒ)/~~现阶段还是得已官方为准啊
val non_Nullable_l = non_Nullable.length // 错误:变量“non_Nullable”可能为空

//空安全正确写法
nullable?.toString()//多了一个?,这里我是这样理解的:当代码执行这一句的时候如果nullable == null时则什么都不干,也就是后面的方法不执行

接着看看get() 和set()

kotlin里 变量定义默认是有get()和set()的,文档中声明一个属性的完整语法是这样的:

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

说实话第一次看到这个的时候不太明白,但是根据“顾名思义”我们也可以大概理解:

var <属性名>[: <属性类型>] [= <属性初始化>]
    [<get方法>]
    [<set方法>]

其初始器(initializer)、getter 和 setter 都是可选的。 属性类型(PropertyType)如果可以从初始器或者父类中推导出来,也可以省略。
另外var是变量,所以有get和set方法
val是常量,所以只有get方法,即:

var initialized = 1
var allByDefault: Int? = initialized // 类型 Int、默认 getter 和 setter
val onlyHasGet: Int? = initialized   //类型 Int 、默认 getter

实例:

class MainActivity : AppCompatActivity() {
    /**
     * override用于覆写继承父类或者实现接口中方法
     * fun 用于标识方法
     * 参数形式: 参数名: 类型
     * ? 是用于指定可以为空对象
     */
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var person: Person = Person("pixiaozhi")
        println(person.name)   //调用get
        person.name = "123"    //调用set
        println(person.name)    
    }

    class Person (name:String) {
        var name: String = name //一般只写这一句即可,Kotlin如果没有任何指定,属性会默认使用getter和setter
            // field(幕后字段)表示当前的变量,field 标识符只能用在属性的访问器内。
            get() = field //使用field代表当前的变量,不能直接使用变量名(会无限调用直到报java.lang.StackOverflowError) 
            set(value) {
                field = value //setter是没办法像get一样简写的,因为它set(value) = field = value编译报错  
            }

    }
}

要注意的是:field标识符只能用于getter与setter中,不能用在别的地方。
另外,只有当使用到field字段或者getter,setter中有一个默认实现时,才有field字段。别的时候并没该字段。

Kotlin学习还在探索前进中,以上全是根据官方文档定义然后自己使用后的理解写的,如有错误请指正,我会尽快更改。最后谢谢大家观看!


为了向别人、向世界证明自己而努力拼搏,而一旦你真的取得了成绩,才会明白:人无须向别人证明什么,只要你能超越自己。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值