Kotlin基础入门 静态变量 静态函数
在 Kotlin 中使用静态的方式不止一种,嗯... 大约有3 - 4种,具体采用哪种方式,还需要自己根据场景选择了~
-
-
- Java 基础认知
-
- 常规方法
- 静态方法
- Kotlin 静态变量、常量、函数
-
- 单例 Object
- 伴生 companion object
- 顶层类 顶层方法
- 注解 @JvmStatic、@JvmField(支持 Java 调 Kt)
- 静态常量 const
-
在 Java
中 工具类
或 管理常量
,我们都会使用static
静态修饰,这样做主要是为了调用方便
Java 基础认知
主要分为 常规使用
和 静态使用
,方便初入门的人补充下基础(os:现在还有新人么...
)
常规方法
package com.example.ktobject;
public class JavaUtil {
public void doSomething() {
System.out.println("2023希望我们都更好,加油");
}
}
常规调用(需要先创建实体类,然后才可以调用内部方法)
package com.example.ktobject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var javaUtil = JavaUtil()
javaUtil.doSomething()
}
}
静态方法
package com.example.ktobject;
public class JavaUtil {
public static String anyBoy = "2023希望我们都更好,加油";
public static void doSomething() {
System.out.println("2023希望我们都更好,加油");
}
}
静态调用
package com.example.ktobject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//静态变量
var anyBoy = JavaUtil.anyBoy
//静态方法
JavaUtil.doSomething()
}
}
Kotlin 静态变量、常量、函数
关于静态变量、常量、函数(方法)在Kotlin的使用,主要有Object、companion object、顶层方法、 @JvmStatic注解、@JvmField注解等方式
其中 静态变量、常量
的内容均放在了 @JvmStatic、@JvmField注解
进行讲解
这是我创建的一个 Kt 工具类,它只是一个普通类
package com.example.ktobject
class KtUtil {
fun doSomething() {
println("2023希望我们都更好,加油")
}
}
如果调用的话也需要创建实例后调用方法
package com.example.ktobject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var ktUtil = KtUtil()
ktUtil.doSomething()
}
}
单例 Object
使用 Object
关键字修饰类
补充、扩展
-
该方式主要用到了
Kt 单例
方面的知识 -
不支持 Java 调用 Kt 方法
-
该方式所修饰的类,可以看做静态类,
内部方法均为静态方法(定制性弱了一点)
-
同时在
Kt
中还可以用open
、data
、internal
package com.example.ktobject
object KtUtil {
fun doSomething() { println("2023希望我们都更好,加油") }
}
调用方式
package com.example.ktobject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
KtUtil.doSomething()
}
}
图示
使用不用关键字修饰类时,As 给出的图示也不相同
- class 修饰类图-
- Object 修饰类图-
伴生 companion object
这儿使用 companion object
包裹方法,只有在该作用域内的方法方为静态方法
补充、扩展
- 定制性更强一些,可以定义不同方法的调用方式
- 调用
companion object
修饰时,原理是内部维护了一个伴生类
不支持 Java 调用 Kt 方法
KtUtil
package com.example.ktobject
class KtUtil {
fun doAnything() {
println("普通方法,不支持类名.调用")
}
companion object {
fun doSomething() {
println("2023希望我们都更好,加油")
}
}
}
调用方式
package com.example.ktobject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//基础调用(先建实例,再调方法)
KtUtil().doAnything()
//静态调用
KtUtil.doSomething()
}
}
顶层类 顶层方法
顶层方法是指那些没有定义在任何类中的方法,Kotlin编译器会将所有顶层方法编译成静态方法
补充、扩展
- 该方式调用静态方法时
无需通过 类名.方法,可直接调用方法
支持 Java 调用 Kt 方法
- 我之前记录一个关联知识 为何Kotlin文件有的带.kt后缀,有的不带?
- 顶层方法常用在
扩展函数、扩展属性
场景
创建.Kt File三连招
- New - Kt File-
- 起名 - File-
- 初始内容-
KtUtils
package com.example.ktobject
fun doSomething() {
println("2023希望我们都更好,加油")
}
调用稍有不同,无需通过 类名.方法,可直接调用方法(这就是所谓的顶层方法)
package com.example.ktobject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
doSomething()
}
}
图示
注解 @JvmStatic、@JvmField(支持 Java 调 Kt)
我们使用 @JvmStatic 注解静态方法,使用@JvmField 注解静态参数(变量、常量)
-
原始
object
方式并不支持Java通过静态方式调用Kt静态方法
,需要在方法上加@JvmStatic
才能支持调用package com.example.ktobject
object KtUtil {
@JvmField var anyBoy:String ="2023希望我们都更好,加油" @JvmStatic fun doSomething() { println("2023希望我们都更好,加油") }
}
-
原始
companion object
方式并不支持Java通过静态方式调用Kt静态方法
,需要在方法上加@JvmStatic
才能支持调用package com.example.ktobject
class KtUtil {
@JvmField var anyBoy:String ="2023希望我们都更好,加油" fun doAnything() { println("普通方法,不支持类名.调用") } companion object { @JvmStatic fun doSomething() { println("2023希望我们都更好,加油") } }
}
加对应的 @JvmField
、 @JvmStatic
注解后,Java 可正常调 Kotlin 变量、方法等
静态常量 const
使用const
时,首先要了解 var、val
修饰变量的区别
var
可变变量,可更改val
只读变量,不可更改
注意: const 仅支持 val 只读变量!!!
const作用域
一般有以下三种
-
顶层方法
package com.example.ktobject
const val anyBoy: String = "常量(只读变量):2023希望我们都更好,加油"
-
object
package com.example.ktobject
object KtUtil {
const val anyBoy: String = "常量(只读变量):2023希望我们都更好,加油"
} -
companion object
package com.example.ktobject
class KtUtil {
companion object{ const val anyBoy: String = "常量(只读变量):2023希望我们都更好,加油" }
}
提示1:object、companion object 内修饰常量,可以不加const ,但是会报警告...
提示2:如果使用了const ,就不需要加 @JvmField 注解也支持Java调Kt咯
兴趣扩展 → const val
和val
修饰对象的主要区别
引用性
- 没有使用const ,在kotlin中,都是直接引用的
- 在java中,必须写全路径,通过
getter
方法获取
Kt类
Java引用
可见性
const val
可见性为public final static
,可以直接访问val
可见性为private final static
,并且val
会生成方法getNormalObject()
,通过方法调用访问