Kotlin学习笔记——归纳整理

Kotlin简介来自于著名的IDE IntelliJ IDEA(Android Studio基于此开发) 软件开发公司 JetBrains(位于东欧捷克)
是一种基于JVM的静态类型编程语言,2017年谷歌I/O大会确定Kotlin为Android的官方语言

一:基础语法

1.1 特性

在Kotlin中定义包与Java有点不同,在Kotlin中目录与包结构无需匹配,
Kotlin的源码可以在磁盘上的任意位置。

// 包格式 和 java 一致
package com.ymc.hellokotlin

fun main(args: Array<String>) {
   
   
    println("Hello world")
    println(max(2,3))
}

fun max(a:Int ,b:Int):Int{
   
   
    return if(a>b) a else b;
}
  1. main 函数不需要在class 中就可以运行
  2. fun 代表一个函数,后边紧跟函数名称,参数列表和返回值类型
  3. 参数实现写 参数名称 然后冒号隔开,再写参数类型(和java 相反)
  4. 函数的返回值是在后边的(和java刚好相反的)当然 有返回值 也可以不写返回类型(前提是:只有表达式体 函数返回类型可以省略,如果是代码块体函数就必须要 写明函数返回类型),因为kotlin 通过 类型推导 也是可以知道返回值类型的
  5. system.out.println 被包装为 println
  6. 在行末可以省略 分号 (类似 js)
  7. 看到max函数中 if类似于三元表达式 kotlin中,if 是有结果值的表达式
  8. 如果返回值 类似于 java 中的 void 则可以写成 :Unit ,当然也可以省略不写

在kotlin 中,除了部分循环(for do 和 do/while)大多控制结构都是表达式,是有返回值的。另一方面 java 中的赋值语句为表达式,而kotlin 中则为语句。

与Java定义包名一样,在源文件的开头定义包名:但是不同的是,包名和文件夹路径可以不一致。

1.2 变量

kotlin 的变量声明是可以省略类型的,所以kotlin 变量声明有别于java ,kotlin变量声明顺序为关键字变量名称类型(可不加),如果变量没有初始化则需要明确表明变量类型。

常量与变量都可以没有初始化值,但是在引用前必须初始化编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。如果不在声明的时候初始化则必须提供变量的类型

主要分为两种定义:
(官方推荐 尽量使用val 声明变量,使程序更接近函数式编程风格)

  • val :不可变引用 ,在val声明变量后不能再初始化之外再次赋值与java final一致
  • var :可变引用 , 该类型变量可以随便赋值

1.2.1 可变变量的定义: var 关键字

var <变量名> : <变量类型> = <初始值>

var sum: Int = 3
sum = 8

//由于编译支持类型推导可以省略Int类型
var sum = 3
sum = 8

1.2.2不可变变量的定义: val 关键字

( 不能进行二次赋值,类似Java中的final类型)

val <常量名> : <常量类型> = <初始值>

val sum: Int //没有赋值初始化之前必须指定类型
sum = 5

1.2.3 常量

已知值的属性可以使用 const 修饰符标记为 编译期常量。需要满足如下几种条件 (类似 java 中的 constanUtil 中的 常量值)

  1. 位于顶层或者是 object 的一个成员
  2. 用 String 或原生类型 值初始化
  3. 没有自定义 getter
const val SUBSYSTEM_KEY: String = "key"

@Deprecated(SUBSYSTEM_KEY) fun foo() {
   
    …… }

1.2.4 字符串模板

字符串可以包含模板表达式,以$开始

val book = Book("Thinking In Java", 59.0f, "Unknown")
val extraValue = "extra"
Log.d("MainActivity", "book.name = ${
     
     book.name}; book.price=${
     
     book.price};extraValue=$extraValue")

1.3 类与属性

1.3.1 基础

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

//类定义,继承类和实现接口
class FeedBackActivity : NativeBaseActivity(), View.OnLongClickListener, BitmapUtil.SaveImageCall {
   
   
    
}

创建类的实例

val invoice = Invoice()
val customer = Customer("Joe Smith")
//注意 Kotlin 并没有 new 关键字。

我们比较一下 java 和 kotlin 中类的写法的不同
java:

public class DemoBean {
   
   

   private final String name;

   public DemoBean(String name) {
   
   
       this.name = name;
   }

   public String getName() {
   
   
       return name;
   }
}

Kotlin:

class DemoBean(val name: String)

类是将数据和处理数据的代码封装成一个单一的实体。

 class Person{
   
   
    var name :String  = "ymc"    // 可读可写
    val isMarried : Boolean  = false    // 只读
}

上段代码中 isMarried 会生成一个字段,一个getter ,而 name 则会生成 一个 getter和一个 setter 。

kotlin 在你声明属性的时候,你就声明了对应的访问器,默认的访问器 就是返回值的 getter 和 更新数值的 setter ,kotlin 会暴漏一个 getName 方法,当然我们也可以自定义访问器。

fun main(args: Array<String>) {
   
   
    var person = Person()
    println(person.name +";"+ person.isMarried )
}

可以看到我们直接调用而不需要get,感觉很像js…

1.3.2 自定义访问器

class Person{
   
   
     var name :String  = "ymc"
     var sex : Int = 0;  // 0 为女性 1为男性
     val isMarried : Boolean  = false
     val isBoy :Boolean
            get() {
   
   
                return if(sex==1) true else false
            }
}

将Person 添加 sex 和 isboy 属性,重写getter ,这样就可以做到自定义访问器。

如果 我们设置属性为val ,但是通过自定义 getter修改属性?
fun main(args: Array<String><
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值