本文及以后文章使用的开发工具:IDEA ,自行安装
1、变量
2、常量
3、注解
一、变量
关键字: var 和 val
两者区别:
var | val |
---|---|
相当于Java中的普通变量 | 相当于java中的final修饰变量 |
定义格式:
关键字 变量名 : 数据类型 = XXX
Demo:
//var:
//立即初始化
var a: Int = 10
//自动推出类型b为int类型,同时String,boolean...一样
var b = 10
//没有初始化的时候,必须声明类型
var c: Double
c = 4.21
c += 1
println("var变量:\n \t a=$a,\t b=$b, \t c=$c")
//val
// 立即初始化
val d: Int = 10
// 自动推出类型b为int类型,同时String,boolean...一样
val e = 10
// 没有初始化的时候,必须声明类型
val f: Float
f = 5.21F
//f+=1 //此句报错,因为c是常量,只能复制一次(相当于fianl)
println("val常量:\n \t d=$d,\t e=$e,\t f=$f")
打印结果:
结果图
ps: $ 符号表示引用的意思
二、声明可为空( ?)的变量
关键字: ?
定义格式:
var/val 变量名 : 类型? = null/确定的值*
Demo:
var g: Int? = 10
val h: String? = null
println("可为空的变量:\n \t g=$g,\t h=$h")
打印结果
结果图.png
三、lateinit 和 lazy{}
3.1、 lateinit 后期初始化属性
1、lateinit 只能修饰用 var 修饰的变量
2、不能修饰可为 null 的变量
3、不能修饰基本数据类型,int,double等等,但是 String(引用数据类型)是可以的
4、声明的变量,必须赋值后才能使用,否则报异常UninitializedPropertyAccessException(未初始化的属性访问异常)
Demo:
class Test {
lateinit var name: String
}
fun main(args: Array<String>) {
var test = Test()
test.name = "我是 kotlin"
var name = test.name
println("$name")
}
打印结果
3.2 、lazy{ } 延迟初始化属性
1、延迟初始化指当程序在第一次使用到这个变量(属性)的时候在初始化。
2、不能用于类型推断,且该函数在变量的数据类型后面,用 by 链接。
3、只能修饰用 val 声明的变量
Demo:
//声明一个延迟初始化的字符串
val str: String by lazy { "延迟初始化" }
println("$str")
打印结果:
结果图.png
四、常量
关键字:const
1、const只能修饰val,不能修饰var
4.1、声明常量的三种方式:
1、在顶层声明
2、在object修饰的类中声明,在kotlin中称为对象声明,它相当于Java中一种形式的单例类
3、在伴生对象中声明
在object的对象声明和伴生对象中:
kotlin | java |
---|---|
val | private static final |
const val | public static final |
ps:object 这个关键字,可用来,对象声明(相当于单例),伴生对象(相当于java中的静态变量),对象表达式(匿名内部类),这里先提一下,以后详细写
在普通的类中:
kotlin | java |
---|---|
vasl | final |
Demo:
const val AA: String = "顶层声明"
class Demo {
companion object {
const val CC: String = "伴生对象"
}
}
object Demo2 {//object是个关键字,可修饰类
const val BB = "object修饰的类中"
}
fun main(args: Array<String>) {
println("AA = $AA")
println("BB = ${Demo2.BB}")
println("CC = ${Demo.CC}")
}
打印结果
结果图.png
五、注释
1、单行注释
2、多行注释
3、嵌套注释(这是和java的区别)
Demo
//单行注释
/**
* 多行注释
* */
/*
第一层块注释
/*
第二层块注释
/*
第三层快注释
这种注释方式在java中是不支持的,但是在kotlin中是支持的。算是一个亮点吧(貌似意义不大)。
*/
*/
*/
----------------------------THE END---------------------------
持续写更多....慢慢来咯~~~
网友评论