(1)变量和函数
-
可变变量和不可变变量
1.可变变量(var),这种变量得值可以被改变,这种声明对应得是普通得(非final)得java变量 2.不可变变量(val),这种变量得值不能在初始化之后在赋值,它对应得是java得final变量 但是尽管val引用自身不可变,但是它指向得对象可能是改变得
-
函数
(1)基本结构 以fun开头紧跟函数名括号中是参数以及参数类型,后面冒号跟着得是返回值类型(如果没有返回就不需要指定) 花括号中是函数体return是返回值。 fun max(a: Int, b: Int): Int { return if (a > b) a else b } (2)表达式函数体 如果函数体是单个表达式构成得,可以用这个表达式作为完整得函数体,并去掉花括号和return fun max(a: Int, b: Int): Int = if (a > b) a else b
(2)类和属性
-
类得概括
(1)普通类声明 在Kotlin中Public是默认得可见性所以可以省略它 class Person(val name:String) (2)data class数据类 例如java中得bean对象可以用kotlin中得data修饰class,data class 自动复写了bean中得getter/setter方法,以及toString()方法方便进行数据管理,减少了N多得代码编写 data class Person(val name:String,val age:String) (3)类得构造方法 kotlin得构造函数分为一个主构造函数和多个次构造函数,次构造函数必须要包含主构造函数得参数,主构造函数不能包含任何得代码,初始化得代码可以放到init关键字得初始化块中。构造函数得参数默认可以赋初始值,这样可以解决传参得问题,如果没有给一个类声明构造函数,将会生成一个不做任何事情得默认构造方法 // 主构造函数声明 class person(val name:String) // 主从构造函数声明 class person(val name:String,val age:Int){ constructor(val name:String): this(name,0) } // 私有构造函数声明 class Person private constructor() (4)如果想让类能够被继承必须在类前面加上open关键字
-
接口 抽象类
一个类可以实现任意多个接口但是只能继承一个类,kotlin得接口可以实现带方法体得方法
interface Clickable{ //需要子类复写得方法 fun click() // 默认实现得方法 fun showOff() = printf("I am clickable") }
抽象类中通常包含一些没有实现并且必须在子类重写得抽象成员。抽象类中非抽象类并不是默认open得,但是可以标注为open
abstract class People{ abstract fun sayHello(val name:String) open fun eat(){ print("eat") } fun smile(){ } }
-
内部类和嵌套类
和java一样,在kotlin中可以在一个类中声明一个类,这样做在封装一个辅助类或者把一些代码放到靠近它被使用得地方时非常有用,kotlin得嵌套类默认不能访问外部类得实例 除非声明成inner内部类
class Outer{ inner class Innser{ // 获取外部类得实例 fun getOuterReference():Outer = this@Outer } }
-
密封类(sealed 修饰得类)
密封类即是为父类添加一个sealed修饰符,对可能创建得子类做出严格得限制,所有得直接子类必须嵌套在父类中,sealed修饰得类默认是open类
sealed class Expr{ class Num(val value:Int): Expr() class Sum(val left:Expr,val right:Expr):Expr() } fun eval(e:Expr) : Int{ when(e){ is Expr.Num -> e.value is Expr.Sum -> eval(e.right) + eval(e.left) } }
-
单例(Object 修饰)
object关键字定义一个类并同时创建一个实例换句话说也就是全局只有一个对象。对象表达式用来替代java得匿名内部类
// 单例图片处理工具类 object ImageUtils{ }