Kotlin中的变量、常量以及注释多多少少和Java语言是有着不同之处的。不管是变量、常量的定义方式,还是注释的使用。下面详细的介绍Kotlin中的变量、常量、注释的使用。以及和Java的对比。
如果您还没有搭建环境和不了解Kotlin的,请看我的上一篇博文Kotlin——初级篇(一):开发环境搭建

目录

一、Kotlin之变量用法

kotlin变量的声明方式与Java中声明变量有很大的区别,而且必须使用varval关键字。其中:

  • var: 用此关键字声明的变量表示可变变量,即可读且可写。相当于Java中普通变量
  • val: 用此关键字声明的变量表示不可变变量,即可读且不可写。相当于Java中用final修饰的变量

1.1、基础用法

  • 定义格式: 关键字 变量名: 数据类型 = xxx

例:这是在顶层声明的时候

//立即初始化
var var_a: Int = 10//推导出类型
var var_b = 5//没有初始化的时候,必须声明类型
var var_c: Float
var_c = 12.3f
var_c += 1println("var_a => $var_a \t var_b => $var_b \t var_a => $var_c")//立即初始化
val val_a: Int = 100//推导出类型
val val_b = 50//没有初始化的时候,必须声明类型
val val_c: Int
val_c = 1
// val_c += 1 因为c是常量,所以这句代码是会报错的println("val_a => $val_a \t val_b => $val_b \t val_c => $val_c")

打印结果为:

var_a => 10      var_b => 5      var_a => 13.3
val_a => 100     val_b => 50     val_c => 1
  • 其中。varvalKotlin中定义变量必须使用的关键字。
  • 每一行代码的结束可以省略掉分号;,这一点是和Java不同的地方。当然,第一次写可能会有一点不习惯。
  • print()println()都是打印方法,后者打印完成之后会换一行。此两个方法和Java的打印方法是一模一样的。
  • $符号表示引用的意思。这里理解为字符串模板,在后续的数据类型章节下的字符串类型中会讲解到。

1.2、在类中声明以及声明可空变量

1.2.1、类中声明变量

上面的是演示变量的基础定义。而且只有在顶层声明的情况下是可以不用实例化的。但是在实际开发当中,一般都是在一个类中去定义变量,这种情况被称为声明类的属性。在后面Kotlin——中级篇(二):属性与字段详解章节会详细的讲解。这里讲解其声明的特点并实例分析。

其特点如下:必须初始化,如果不初始化,需使用lateinit关键字。参见1.3节。

例:

class Test1{// 定义属性var var_a : Int = 0val val_a : Int = 0// 初始化init {var_a = 10// val_a = 0 为val类型不能更改。println("var_a => $var_a \t val_a => $val_a")}
}Test1()

输出结果为:

var_a => 10      val_a => 0

其中:在上面的例子中,大家只要关心类中声明变量的用法就可以了。其他的不用关心,这里只是为了能看到程序运行结果。

1.2.2、声明可空变量

Java中,当我们声明一个变量不必关心这个变量是否为空,在使用这个变量的时候几乎上都会判断其是否为空增加程序的安全性。这样的习惯是极好的。但是无形中也增加了一定的代码量。有时候这样的代码还极有可能是无用的废代码。然而在Kotlin中当我们可以确定这个属性或变量一定不为空时,我们就用上面讲解到的去定义变量。否则就把它声明为可空变量

可空变量的特点:

  • 在声明的时候一定用标准的声明格式定义。不能用可推断类型的简写。
  • 变量类型后面的?符号不能省略。不然就和普通的变量没区别了。
  • 其初始化的值可以为null或确定的变量值。

定义:

var/val 变量名 : 类型? = null/确定的值

例:

 class Test2{// 声明可空变量var var_a : Int? = 0val val_a : Int? = nullinit {var_a = 10// val_a = 0 为val类型不能更改。println("var_a => $var_a \t val_a => $val_a")}
}Test2()

输出结果为:

var_a => 10      val_a => null

关于可空变量的定义就上面那么多。但是在使用可空变量的时候就没有Java中那么复杂了。关于可空变量的使用请参见我的Kotlin——初级篇(六): 可空类型、空安全、非空断言、类型转换等特性总结这篇文章。

1.3、后期初始化与延迟初始化

在1.2节中,当在类中定义一个变量(属性)的时候是必须初始化的。这在平时的实际开发中能满足大部分的需求。但是还是有一些特殊的场景中不能满足。比如说:Android开发中对组件变量的声明与赋值,以及在使用Dagger2注解变量等。这就需要Kotlin中特有的后期初始化属性来满足这个需求了。当然这里还为大家讲解延迟初始化,在实际的开发中也是很有用处的。

1.3.1、后期初始化属性

声明后期初始化属性的特点:

  • 使用lateinit关键字
  • 必须是可读且可写的变量,即用var声明的变量
  • 不能声明于可空变量。
  • 不能声明于基本数据类型变量。例:IntFloatDouble等,注意:String类型是可以的。
  • 声明后,在使用该变量前必须赋值,不然会抛出UninitializedPropertyAccessException异常。

实例讲解:举一个Android中常见的例子

// 声明组件
private lateinit var mTabLayout : TabLayoutlateinit var a : Int // 会报错。因为不能用于基本数据类型。// 赋值
mTabLayout = find(R.id.home_tab_layout)// 使用
mTabLayout.setupWithViewPager(mViewPager)

1.3.2、延迟初始化属性

所谓延迟初始化即:指当程序在第一次使用到这个变量(属性)的时候在初始化。

声明延迟初始化属性的特点:

  • 使用lazy{}高阶函数,不能用于类型推断。且该函数在变量的数据类型后面,用by链接。
  • 必须是只读变量,即用val声明的变量。

实例讲解:同样是Android中常见的例子

// 声明一个延迟初始化的字符串数组变量
private val mTitles : Array<String> by lazy {arrayOf(ctx.getString(R.string.tab_title_android),ctx.getString(R.string.tab_title_ios),ctx.getString(R.string.tab_title_h5))
}// 声明一个延迟初始化的字符串
private val mStr : String by lazy{"我是延迟初始化字符串变量"
}

二、Kotlin之常量的用法

Kotlin中声明常量的方式和在Java中声明常量的方式有很大的区别。这里举例说明:

Kotlin中使用val时候对应的Java代码:

Kotlin中的 val numA = 6   等价于  Java中的:public final int numA = 6

很显然,Kotlin中只用val修饰还不是常量,它只能是一个不能修改的变量。那么常量怎么定义呢?其实很简单,在val关键字前面加上const关键字。

即:

const val NUM_A = 6

其特点:const只能修饰val,不能修饰var

声明常量的三种正确方式

  1. 在顶层声明
  2. object修饰的类中声明,在kotlin中称为对象声明,它相当于Java中一种形式的单例类
  3. 在伴生对象中声明

举例说明:

// 1. 顶层声明
const val NUM_A : String = "顶层声明"// 2. 在object修饰的类中
object TestConst{const val NUM_B = "object修饰的类中"
}// 3. 伴生对象中
class TestClass{companion object {const val NUM_C = "伴生对象中声明"}
}fun main(args: Array<String>) {println("NUM_A => $NUM_A")println("NUM_B => ${TestConst.NUM_B}")println("NUM_C => ${TestClass.NUM_C}")
}

输出结果为:

NUM_A => 顶层声明
NUM_B => object修饰的类中
NUM_C => 伴生对象中声明

三、Kotlin之注释

Kotlin中的注释几乎和Java没什么区别。唯一的区别在于Kotlin中的多行注释中可以嵌套多行注释,而Java中是不能的。

  • 单行注释

    两个斜杠开头表示单行注释(//

举例:

// 1. 单行注释
  • 多行注释(块注释)

    以斜杠加星号开头(/*),同时以星号加斜杠结尾(*/),中间这是要注释的代码块!

举例:

 /*2. 多行注释(块注释)我是多行注释*/
  • 多行注释嵌套

kotlin中块注释的级联使用,其实个人觉得块注释的嵌套使用的意义不大,不过从视觉上确实能给人一种层次感

举例:

  /*第一层块注释/*第二层块注释/*第三层快注释这种注释方式在java中是不支持的,但是在kotlin中是支持的。算是一个亮点吧(貌似意义不大)。*/*/*/

注:在Java中使用上面的注释代码直接报错。

  • 类注释、方法注释

    和Java是一样的

举例:

/***  3. 方法的注释(同java一样)*/
fun testMethodNote(){}

四、尾语

对于Kotlin中的变量、常量及注释就讲解到这里。对于Kotlin的数据类型、控制语句等基础语法会在后面的章节中更新。并提供源码。
源代码

如果各位大佬看了之后感觉还阔以,就请各位大佬随便star一下,您的关注是我最大的动力。
我的个人博客:Jetictors
掘金 : Jetictors
Github:Jteictors

欢迎各位大佬进群共同研究、探索

QQ群号:497071402

转载于:https://www.cnblogs.com/Jetictors/p/7723044.html

Kotlin——初级篇(二):变量、常量、注释相关推荐

  1. Kotlin——初级篇(六):空类型、空安全、非空断言、类型转换等特性总结

    在我们熟知的Java中,定义一个变量可以默认不赋值,因为Java的系统会给我们默认赋一个默认值,并且Java可定义一个赋值为null的变量,这样在使用这个变量的时候都会去显示判断该变量是否为null. ...

  2. 一步一步学Ruby(二):变量,常量

    本文内容 变量 变量范围 伪变量 常量 一.变量 1. 变量定义无需指定类型 2.只能包含字母.数字.下划线,但只能以字母或下划线开头 x, y2,_mCount 二.变量范围 1.局部变量 以小写字 ...

  3. 听说C语言很难?怎么不来看看我这篇(二)变量

    1.写在前面 今天大年初十,今天开工了,我们今天继续来学C语言的变量相关的规则,也是C语言之父的<C程序设计语言>的神书的第二章.任何程序都是用来处理数据的,那么变量或者常量都是用来存储对 ...

  4. Kotlin——初级篇(一):最详细的环境搭建

    众所周知,Kotlin出来已经良久了.Kotlin有着众多优势,不管是用于Android开发中,还是Java开发,都能缩减很大的代码量,大大提高了工作效率.而小生本人也是才从忙碌的个工作中抽身出来,有 ...

  5. android mvp 登录,Android MVP(初级篇二、登陆案例)

    这篇文章仅仅是一个初识MVP的小白登陆项目总结,关于MVP知识点本片文章先不谈,通过本篇文章能简单应用达到效果即可. 效果: (XML我没写Edittext,就一个Button应付了,吐司是响应成功后 ...

  6. Kotlin——中级篇(二): 属性与字段详解

    在前面的章节中,详细的为大家讲解到了Kotlin中对类的类的定义.使用.初始化.初始化.类继承等内容,但是在一个类中,几乎上是不可能不出现属性与字段(field)的,这一篇文章就为大家奉上Kotlin ...

  7. 用Kotlin撸一个图片压缩插件-插件基础篇(二)

    简述: 前两天写了篇用Kotlin撸一个图片压缩插件-导学篇,现在迎来了插件基础篇,没错这篇文章就是教你如何一步一步从零开始写一个插件,包括插件项目构建,运行,调试到最后的上线发布整个流程.如果你是插 ...

  8. Kotlin实战指南二:变量、常量、静态常量

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/87811333 本文出自[赵彦军的博客] Kotlin初体验二:变量.常量.静态常 ...

  9. 字符变量赋值规则_Java的常量、变量、数据类型(基础篇二)

    标识符 标识符:是指在程序中自己定义的内容,如类名.方法名.变量名等等. 命名规则:是有硬性要求的 关键字:是指Java已经定义好的单词,具有特殊含义,比如public.static.class.vo ...

最新文章

  1. Bert代码详解(一)重点详细
  2. 第一天写,希望能坚持下去。
  3. catia过载属性使用方法_catia简明操作手册
  4. linux系统中cache清理/释放命令
  5. 算法与数据结构(part4)--顺序表
  6. 内存问题提醒!结构体+protobuf做协议体发送!序列化
  7. 北京林业大学计算机复试难度,北京林业大学考研难吗?一般要什么水平才可以进入?...
  8. php 控制器 模板,php学习笔记(一)php模板与控制器
  9. jQuery源码解析(3)—— ready加载、queue队列
  10. sql注入***的各种注入方法
  11. 云计算学习笔记004---hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载
  12. 辽宁工业大学计算机复试经验,辽宁工业大学车辆工程考研经验
  13. python中exit的作用_python中,exit,return,sys.exit()等的区别与使用方法 | 学步园
  14. 微信开发的时候自定义菜单
  15. java Cannot find the class file for javax.servlet.http.HttpServletRequest.错误解决
  16. DONET中常用的一些快捷键收集。
  17. 简单的爬虫(豆瓣250)
  18. window10笔记本安装USB转VGA驱动,电脑重启后无法开机
  19. PDMS批量输出ISO图
  20. 无法搜索到对方电脑共享的文件

热门文章

  1. windows安装rsync
  2. 蓝懿IOS委托模式代理模式
  3. Remove Duplicates from Sorted Array II leetcode java
  4. 猫:君主般的眼神 监视领地。 狗
  5. iOS开发之普通网络异步请求与文件下载方法
  6. 1.KafKa-介绍
  7. Linux 终端下 dstat 监控工具
  8. 视频下载比想象中容易
  9. 面试常考的数据结构Java实现
  10. 数据库管理系统与数据库系统