简单学习 Kotlin

Kotlin语言主要有以下几个特点:

高度兼容Java:Kotlin也可以调用传统Java语言的各种类库。由于最终都是编译为JVM字节码运行,Kotlin可以与Java存在于同一个项目中,互相调用。开发者可以部分改造项目中的代码,尝试其新语言特性。官方提供Java代码到Kotlin代码的转换工具。开发者可以把现有的Java/Android项目一键转换为Kotlin项目,实现零成本的改造。
代码简洁高效:语法精炼,无处不在的类型推断,自动生成通用方法,支持Lamda表达式,使Kotlin的代码行数远低于传统Java代码。而代码量的压缩,客观上会提高开发效率。
函数式编程:支持让函数作为参数或者返回的高阶函数用法,支持流式API,支持扩展方法。
常量和变量
可变变量定义:var 关键字
不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)
常量与变量都可以没有初始化值,但是在引用前必须初始化
编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。

val a: Int = 1 // 显式标明类型,立即赋值
val b = 2 // 自动推断出 Int 类型
var c : Int ? = null // 如果没有初始值类型不能省略
c = 3 // 明确赋值

类的定义
在Kotlin中所有类都有一个共同的超类Any

Kotlin中也使用class关键字定义类,所有类都继承于Any类,类似于Java中Object类的概念。类实例化的形式也与Java一样,但是去掉了new关键字。

无参构造函数
如果没有构造函数,将会默认一个无参数构造函数
如果主构造函数的所有的参数都有默认值,编译器会生成一个额外的无参构造函数,它将使用默认值。

//如构造函数为私有,需用private修饰
class DontCreateMe public constructor () {

}

class Customer(val customerName: String = “”){}

主构造函数
带有类名的为主构造函数(只有一个)

主构造函数不能包含任何的代码。初始化的代码可以放到以 init 关键字作为前缀的初始化块
主构造函数中声明的属性可以是可变的(var)或只读的(val)
//如果构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,并且这些修饰符在constructor前面:
class Customer public @Inject constructor(name: String) { …… }

//无修饰可不写constructor关键字
class Customer (name: String) {
var a :Int = 1
init{……}
}

次构造函数
不带类名并且有constructor关键字修饰的函数为次构造函数(可以一个或多个),并且只能存在主构造函数代码块之内

//如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过别的次构造函数间接委托。委托到同一个类的另一个构造函数用 this 关键字即可:
class Person(val name: String) {
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
}

继承父类及实现借口

//:在这代表继承或实现
class DemoEntity:BaseEntity(),Serializable {
var title : String?=null
}

重要关键字
Any
在Kotlin中所有类都有一个共同的超类Any,Any并不是Object
open
修饰类:表示能被继承
修饰方法:表示需要重写
final、open、abstract、override对比

修饰符 相应类的成员 注解
final 不能被重写 在kotlin中默认所有的方法和类都是final属性
open 可以被重写 需要被明确指出
abstract 必须要重写 不能被实例化,默认具有open属性
override 覆写超类的方法 如果没有被指定为final,则默认具有open属性
companion 伴生对象

//可以省略Factory
class MyClass {
companion object Factory {
fun create(): MyClass = MyClass()
}
}

val instance = MyClass.create()

内部类和匿名内部类
内部类

//如果需要调用成员变量,需要用inner修饰内部类
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}

val demo = Outer().Inner().foo() // == 1

匿名内部类

//匿名内部类
textView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
//…
}
})

字符串模板
val book = Book(“Thinking In Java”, 59.0f, “Unknown”)
val extraValue = “extra”
Log.d(“MainActivity”, “book.name = b o o k . n a m e ; b o o k . p r i c e =

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值