Kotlin基础入门 - 静态变量、常量 And 静态函数、方法

news2024/9/24 23:33:23

2022一晃而过,2023悄然而至,有天晚上看第一行代码(第三版)的时候,又看到了Kotlin中静态方法的几种使用方式,蹭着过年还有一些时间,写了个Demo简单测试记录一下

在 Kotlin 中使用静态的方式不止一种,嗯... 大约有3 - 4种,具体采用哪种方式,还需要自己根据场景选择了~

      • Java 基础认知
        • 常规方法
        • 静态方法
      • Kotlin 静态变量、常量、函数
        • 单例 Object
        • 伴生 companion object
        • 顶层类、顶层方法
        • 注解 @JvmStatic、@JvmField

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 中还可以用 opendatainternal
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

我们使用 @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 变量、方法等

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript基础系列之原型链

1. 前言 今天的重点复习的是JavaScript原型链。所谓是"基础不牢,地动山摇",原型链作为继承等相关知识的基础,就显得尤为重要了。接下来以手绘原型链为基础,详解讲解下原型链以及相关的属性 2. 原型 以及原型链 2.1 pro…

vs 生成前事件 生成后事件命令

为了提高编译生成后的事件效率,不需要手动的拷贝到固定目录。可以在项目->属性中设备生成后事件。输入相应的命令行,即可。 Visual Studio中,可以在项目-》属性-》生成事件-》生成后事件命令行 xcopy 复制文件; /y/e 如果只复…

JavaEE【Spring】:MyBatis查询数据库

文章目录一、理论储备1、MyBatis 的概念2、MyBatis 的作用二、第⼀个MyBatis查询1、创建数据库和表2、添加MyBatis框架支持① 老项目添加MyBatisⅠ. 新增功能Ⅱ. EditStarters插件② 新项目添加MyBatis3、配置连接字符串和MyBatis① 配置连接字符串② 配置 MyBatis 中的 XML 路…

数据标注平台如何保护用户数据安全?

近期,在《麻省理工科技评论》在一篇万字长文调查中,一位年轻女子坐在自家的马桶上的图片也被扫地机器人拍摄下来,并被流传到网上、大范围传播。但事实上,这也并非是一件新鲜事了。例如,2020年秋,一系列从低…

为什么MySQL 要选择 B+树

一、什么是索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。再直白点就是我们可以把索引理解成图书或者字典的目录。 既然索引是数据的一种存储结构,那么我们必然要对其进行存储,同时&…

你可以不用Git,但不能不会Git(二)基础(上)

目录 一.环境配置 二.本地初始化仓库 三.文件的两种状态 四.文件加入暂存区 五.文件提交与删除 1.提交文件 2.删除文件 一.环境配置 当安装Git后首先要做的事情是设置用户名称和email地址。这是非 常重要的,因为每次Git提交都会使用该用户信息。 设置用户信…

#G. 红旗招展

Description小J占山为王有一段时间了,他决定把自己的地盘打扮一下---将各种颜色的旗插在山头上当然某一座的山头只能用一种颜色的旗。整个地盘有N个山头,可看成是一棵有N个节点的树。小J还是有一点艺术细胞的,他不想整个地盘杂乱无章。于是他…

Kubernetes安装ingress-controller

IngressController 1. 安装 1.1 查看ingress-nginx的版本匹配 https://github.com/kubernetes/ingress-nginx/blob/main/README.md#readme 下载配置 wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.2/deploy/static/provider/cloud/de…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的图像实例分割模型

给我推荐20个比较流行的图像实例分割模型 U-Net Mask R-CNN FCN SegNet PSPNet DeepLabv3 DenseASPP LinkNet RefineNet ENet ICNet BiSeNet CRF-RNN GCN Tiramisu FRRN DeepLabv3 PANet MaskLab Hybrid Task Cascade给我推荐20个比较流行的图像实例分割模型源码 好的&#x…

java学习之类变量

目录 一、类变量的引出 需解决的问题 传统代码 代码问题 解决方法 运行结果 二、类变量的内存布局 特点 内存中的位置 三、类变量定义 四、类变量语法 五、访问类变量 六、类变量细节 第一条 第二条 第三条 第四条 第五条 第六条 第七条 一、类变量的引出 需…

PHP8---MySQL扩展

目录 一、MySQL扩展的介绍 二、PHP和MySQL连接的基本操作 (1)MySQL连接的准备工作 (2)插入删除操作 三、查询操作 (1)mysqli_fetch_assoc (2)mysqli_fetch_row (3…

19. 网站响应数据加一个简单的密,就能挡住80%的爬虫,你信吗?

本篇博客我们实现响应加密,由于本案例是JS逆向阶段的第一个案例,所以采用最基础加密手段。 爬虫训练场源码同步仓库为 GitCode 项目采集测试地址:爬虫训练场 爬虫训练场框架搭建Python Flask 端 Base64加密前台解密字符串渲染数据框架搭建 本…

Es之mapping

1)、字段类型 2)、映射 Mapping(映射) Mapping 是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和 索引的。比如,使用 mapping 来定义…

深入解析Linux虚拟化KVM-Qemu分析之KVM源码

说明: KVM版本:5.9.1QEMU版本:5.0.0工具:Source Insight 3.5, Visio 1. 概述 从本文开始将开始source code的系列分析了;KVM作为内核模块,可以认为是一个中间层,向上对接用户的控制…

idea中热部署插件JRebel的激活方式

idea中热部署插件JRebel的激活方式 一、打开jrebel 激活面板,如图: 二、选中Team URL(connect to online licensing service) 1、在上面的框中输入激活的url地址 http://127.0.0.1:8888/132d042c-3b1a-4c45-9044-b7897c3de7882…

遗传算法改进(IGA)+python代码实现

遗传算法改进(IGA)python代码实现一、变异概率的改进(1)单点变异(2)多点变异(3)选择性的突变概率二、交叉概率的改进三、适应度函数的改进(1)sigmoid函数&…

PGL 系列(六)node2vec

node2vec DeepWalk存在的问题是比较简单直接,而图结构往往是一个复杂结构,需要考虑很多因素,在深度优先搜索方法之外,还有广度优先搜索,结合以上两种方式可以更好的探索图模型,即node2vec。

华为交换机配置

文章目录网络规划与设计机房连线图PON网络配置网络规划与设计 OLT: 网络光线路终端(Optical Line Terminal) ONU分为两种 MDU(Multi-DwellingUnit,多住户单元) MDU主要应用于FTTB应用类型下的多个住宅用户的接入,一般具有至少4个…

【JDK工具】jinfo、jps、jstack、jstat、jmap

目录一、前言二、关键工具2.1 jps 显示所有JAVA进程信息1. 参数信息2. 常用命令2.2 jinfo 查看虚拟机配置参数信息1. 查看虚拟机参数 jinfo -flags pid2. 查看虚拟机指定参数 jinfo -flag 具体参数 pid3. 查看环境变量 jinfo -sysprops pid4. 参数列表2.3 jstack1. 能排查哪些问…

springboot整合之Validated参数校验

特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整…