kotlin基础语法记录(一)

  1. 可读、可读写、延迟初始化
var  //可读写
val  //只读
lateinit  //晚一点再进行初始化,会被声明为可空类型
//可空类型,不可空类型
//平台类型
java中是通过注解实现可空类型和不可空类型(Nullable、NonNull)


var name: String? = null // ? 声明一个可空类型的变量
name?.length()   // ? 安全调用,判空
name!!.length() // !! 强制调用,不判空

//Java中int float double long
对应kotlin->Int Float Double Long  不可空类型

//java中Int Float Double Long
对应kotlin->Int?  Float?  Double?  Long? 可空类型

//声明一个延迟初始化的不可空变量
private lateinit name : String 

静态类型编程语言:一个变量的类型一旦确定了就不能改变
动态类型编程语言:一个变量的类型可以随时改变。python\js\groovy

  1. 静态方法
//1、kotlin中没有static关键字
//2、kotlin中静态方法写法,文件中直接定义方法和变量,也叫顶层函数,包级函数
//       a)java调用kotlin静态方法--->类名Kt.方法名()
//       b) @file:JvmName("AAA")修饰后,在Java中可以使用AAA.方法名()调用。需要写在文件最上面,package之前

//object创建类并创建其对象
//object修饰的类,可以认为变量和方法都会被定义为静态的。其实是创建了CacheUtils的对象
object CacheUtils{
}  
//在kotlin中调用使用CacheUtils.getXX()
//在Java中调用使用CacheUtils.INSTANCE.getXX()
//该方法其实是创建了这个类的单例对象去使用的。创建匿名内部类也使用object关键字


//非object的类里面使用
class MyApplication{
    companion object {
        fun getXX():String{}
    }
}
//在Java中使用XX.Companion.

companion object {
     //加上  @JvmStatic可以在Java类里面使用类名.方法名()调用
    @JvmStatic 
    fun getXX():String{}
}
  1. 类型判断和转换
is  instanceof
as  强转
AAA::class kotlin的class
AAA::class.java java的class

void对应Unit
Object对应Any
  1. switch case
when  Java中switch的高级版,支持表达式
when (code){
  in 200..299 ->{}

}
  1. 构造方法
construct(name:String) String super(name){}
  1. get set方法
set

//保证只生成一个公开的成员变量,而不是生成set get方法
@JvmField
var username:String? = null
  1. 数组
创建数组
arrayOf("a","b","c")  基本类型会自动装箱,因此基本类型不使用
intArrayOf(1,2,3)
数组长度size
arrayOf()
intArrayOf()
  1. 枚举

  1. 编译器常量
class XXX {
    companion object {
      //使用const关键字,类似于java中的static final String
      private val const NAME = "张三"
    }
}

  1. List、Map等集合类
//要么显示的声明类型
val list:ArrayList<String> = ArrayList()

//要么使用类型推断
val list = ArrayList()

//要么使用类型推断
val list = arrayListOf<String>()

//要么使用
val list = mutableListOf<String>()

//要么使用
val list:MutableList<String> = ArrayList()

//不能使用List,因为kotlin中List是不可修改的,没有add函数的
val list:List<String> = ArrayList()

//遍历
for (name : in list) {  
}

  1. 内部类
//非静态内部类,需要inner修饰符
inner class XX {}

//静态内部类
class XXX {}

  1. internal
当前模块内可见,可以使某个public的类,仅在当前module内被访问到,其他moudle内访问不到
某些类,希望在当前module内到处哭访问,但是又不希望外部mudule访问。
  1. 内部类使用外部类this对象
internal class Outer {
    internal inner class Inner {
        var outer: Outer = this@Outer
    }
}
  1. 受检异常
Kotlin 不需要使⽤ try-catch 强制捕获异常
  1. 声明接⼝/抽象类/枚举/注解
// 声明抽象类
abstract class
// 声明接⼝
interface
// 声明注解
annotation class
// 声明枚举
enmu class
  1. 编译期常量
在静态变量上加上 const 关键字变成编译期常量
  1. 标签
在 Java 中通过 「 类名.this 例如 Outer.this 」 获取⽬标类引⽤
在 Kotlin 中通过「 this@类名 例如 this@Outer 」获取⽬标类引⽤
  1. 遍历
for(item in items)
  1. 嵌套类
在 Kotlin 当中,嵌套类默认是静态内部类 (不持有外部类引⽤)
通过 inner 关键字声明为普通内部类 (内部使⽤外部对象时就会持有外部类引⽤)
  1. 可⻅性修饰符
默认的可⻅性修饰符是 public
新增的可⻅性修饰符 internal 表示当前模块可⻅
  1. open/final
Kotlin 中的类和函数,默认是被 final 修饰的 ( abstract 和 override 例外)
  1. 注释
注释中可以在任意地⽅使⽤ [] 来引⽤⽬标,代替 Java 中的 @param @link 等。
  1. ⾮空断⾔
可空类型强制类型转换成不可空类型可以通过在变量后⾯加上 !! ,来达到类型转换。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 自从实习结束后直到现在将近一年多的时间再也没有用过kotlin, 在今年五月份I/O大会上,Google再次明确了...
    Scus阅读 1,396评论 0 0
  • 概要 类在声明接口&抽象类&枚举&注解时,与 Java 相比基本一样,除了枚举&注解在声明的时候后面哟啊加上cla...
    有啊记阅读 434评论 0 2
  • 官方 官方版本 github 基础 数据类型 整数 类型大小(比特数)最小值最大值Byte8-128127Shor...
    fengyongge阅读 416评论 0 1
  • 1、隐式解析可选类型 有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值,这时候每次使用时都判断和...
    Mr_xuy阅读 492评论 1 4
  • 第2章 Kotlin 语法基础 人与人之间通过语言来交流沟通,互相协作。人与计算机之间怎样“交流沟通”呢?答案是编...
    光剑书架上的书阅读 1,654评论 0 6