如何在kotlin中创建静态变量

在kotlin中创建静态变量有三种方式
1.使用object关键字,比如我现在要在User这个类中新建静态变量与静态方法

class User {

    object NameFiled{ //---注解1
        var name = "张三"
        val age = 18
        fun printNameAndAge(){
            println(name+ age)
        }
    }
}

fun main() {
    println(User.NameFiled.name)
    println(User.NameFiled.age)
    User.NameFiled.name = "李四"
//    User.NameFiled.age = 21 因为age定义成val所以会报错
    println(User.NameFiled.name)
//    调用静态方法
    User.NameFiled.printNameAndAge()
    
//    输出结果为
//    张三
//    18
//    李四
//    李四18
}
解读

注解1:object 关键字相当于在当前类新建一个名叫NameFiled的静态内部类,然后var name相当于java中的static String name,val age相当于java中的static final int age,在后面不可以修改
调用方式:外部类名.内部类名.属性或方法

2.使用companion object关键字,实现上面一样的静态属性与方法代码如下

class User2 {

    companion object{ // 注解---1
        var name = "张三"
        val age = 18
        fun printNameAndAge(){
            println(name+ age)
        }
    }
}

fun main() {
    println(User2.name)
    println(User2.age)
    User2.name = "李四"
//    User2.age = 21 因为age定义成val所以会报错
    println(User2.name)
//    调用静态方法
    User2.printNameAndAge()

//    输出结果为
//    张三
//    18
//    李四
//    李四18
}
讲解

注解1:companion object关键字是直接给当前类新建括号里面的静态属性和方法,而object是给当前类新建一个内部类,在内部类新建属性和方法,所以companion object后面不需要加别的东西,而object需要加一个内部类的类名
调用方式:因为companion object是直接给当前类创建,所以直接使用:当前类名.属性或方法名就能出来

3.使用顶层声明的方式
例如我现在要实现一个工具类,只需要新建一个kt file

  • CalcUtil.kt代码 注意包名
package tyc
/**
 *  create by elitetyc
 *  date:2019/9/12
 *  desc:
 *
 **/
var tycName = "李四"
val age = 18

fun sum(p1: Int, p2: Int) {
    println(p1+p2)
}
  • test.kt 代码 注意包名
package tyc

/**
 *  create by elitetyc
 *  date:2019/9/12
 *  desc:
 *
 **/

fun main() {

    println(tycName)
    tycName = "臧三"
    println(tycName)

    println(age)
//    age = 21 因为声明为val 所以修改时报错

    sum(10,10)


//    输出结果是
//    李四
//    臧三
//    18
//    20
}
解读:

顶层声明的方式,声明的属性与方法,是属于当前包的,当前包下的其他类或方法可以直接使用,使用时直接输属性名或方法名就可以了

你可能感兴趣的:(如何在kotlin中创建静态变量)