安卓小白入门(三)kotlin语法

变量

var和val两种,val不能重新赋值

基本数据类型

Int Long Short Float Double Boolean Char Byte

函数:

fun methodname(param1:Int,Param2:Int):Int{ return 0}

函数2

fun methodname(param1:Int,Param2:Int)=max(1,2)

if语句

同java,有一个额外功能:可返回值

var value = if(num1>num2) num1 else num2

when语句

fun getScore(name:String)=when(name){
 "Tom" -> 86
 "Jim" -> 77
 else -> 0
 }

类似于switch,但不需要写break
格式为:匹配值->{执行逻辑},执行逻辑只有一行代码时可省略{}

功能1:可做类型匹配

fun checkNumber(num:Number){
	when (num){
	is Int ->println("number is Int")
	}
}

功能2: 不带参数的用法

fun getScore(name:String) = when{
	name.startswith("Tom") ->86
	name =="jim" ->77
	}

while循环

与C++ java无差别

for 循环

闭区间【0,10】

for( i in 0..10){
println(i)
}

左闭右开

for (i in 0 until 10 step2)
{
	println(i)
}

类与对象

任何一个类都默认是不可被继承的,要在前声明open才可被继承
open class Person(val name:String, val age:Int) //主构造函数
{
}
Student 类继承Person类,Student的主构造函数调用person类的构造函数
class Student(val sno: String, val grade:Int , name:String, age:Int):Person(name,age) {
    init{
        println("sno is"+sno)
        println("grade is"+grade)
    }
    constructor(name:String,age:Int):this("",0,name,age){}
    constructor():this("",0){}

}

}

主构造函数没有函数体,用init结构体写逻辑
主构造函数中的参数,若父类的构造函数中也有.则不用声明是val or var

次构造函数通过constructor()关键字定义

当类没有主构造函数时,继承父类时不用调用父类的构造函数(即不用加括号),次构造函数直接调用父类的构造函数

class Student:Person{
	constructor(name:Sting,age:Int):super(name,age){
	}
}

接口 interface

interface Study {
    fun readBooks()
    fun doHomework()
}

class Student(name: String, age:Int):Person(name,age),Study{
override fun readBooks() {
    println(name + "is reading.")
}

override fun doHomework() {
    println(name+"is doing homework.")
}

}
kotlin使用override关键字来重写父类或者实现接口中的函数

Student类实现了Study接口,则Student类的实例对象可以把他的Study作为函数的参数

允许对接口中定义的函数进行默认实现

函数可见性修饰符:public,private,protected,default,internal

数据类 data class

data class Cellphone(val brand:String,val price:Double){

}
fun main(){
    val cellphone = Cellphone("aaa",12999.0)
    val cellphone2 = Cellphone("aaa",12999.0)
   println(cellphone == cellphone2)

}

数据类用于将服务端或者数据库中的数据映射到内存中,为编程逻辑提供数据模型的支持。一行代码会自动生成equals() hashcode() toString()

单例类 object

单例模式是最基础的设计模式之一,可用于避免创建重复的对象,我们希望全局某个类最多只能有一个实例时,可用单例模式。
object Singleton {
    fun singletonTest(){
        println("Test")
    }
}

lambda编程

集合的创建与遍历

不可变的集合 listOf
fun main(){
 var list = listOf("App","ssss")
 for (fruit in list){
     println(fruit)
 }
}

可变的集合 mutableListOf
fun main(){
 var list = mutableListOf("App","ssss")
    list.add("ssssdf")
 for (fruit in list){
     println(fruit)
 }
}

set集合的用法和list集合用法一样,setof和mutableSetof,但是Set集合底层用hash映射机制来存放数据,无法保证有序。

map键值对
	fun main(){
	    val map = mapOf("apple" to 1,"Bannana" to 2)
	    for((fruit,number) in map){
	        println(fruit+number)
	    }
	}

集合的函数式API

LAMbda就是一小段可以作为参数传递的代码
list.maxBy(it.length} 最大长度的对象
list.map{it.toUpperCase()} 全部转换为大写
list.filter{it.length <=5} 只保留<=5
list.any{ it.length <=5} 集合中是否有满足条件
llst.all{ it.length <=5} 集合中是否所有都满足

Java函数式API的使用

如果单抽象接口是用java定义的,若有函数把这个接口作为参数,则可以调用函数API

例如 onclickListener是 java定义的的单抽象接口,若要注册一个按钮点击事件,则java要把这个接口的匿名类实例作为参数传入一个函数 setonclickListener(),并且还要通过override关键字来重写接口中的函数,但kotlin只用调用一个函数时API setonclickListener(),不用传参,不用重写函数。

public interface OnclickListener{
	void onClick(View v);
	}
java:
button.setONclickListener(new View.ClickListener(){
	@Override
		public void onClick(View v){
		}
	});

kotlin:
button.setOnclickListener{
}

空指针检查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值