阅读 78

Kotlin知识点

学习站点

1. Kotlin官网

2. Google 学习 Kotlin 编程语言

3. GitHub from-java-to-kotlin

4. 菜鸟教程 Kotlin

文章

1. 使用Kotlin创建单例的几种方式

[Kotlin下的5种单例模式](https://www.jianshu.com/p/5797b3d0ebd0)
复制代码

2. Kotlin下创建 变量,常量,静态常量的方法

[kotlin 静态常量声明](https://blog.csdn.net/yinianjian2017/article/details/80771536)
[Kotlin实战指南二:变量、常量、静态常量](https://blog.csdn.net/zhaoyanjun6/article/details/87811333)
复制代码

3. Kotlin中方法注释不带参数,使用 BugKotlinDocument 插件解决.

实践

1. 网页版交互式代码编辑器,您可以在其中练习编写 Kotlin 程序

developer.android.google.cn/training/ko…

2. Kotlin学习进度:

developer.android.google.cn/kotlin
+

1:当下在看的是基础课程: Kotlin 中的 Android 基础知识(developer.android.google.cn/kotlin/andr…)
2:后面看: 面向编程人员的 Kotlin 训练营(developer.android.com/courses/kot…)
3:后面看: Android Kotlin 基础知识(developer.android.com/courses/kot…)
4:后面看: 使用 Kotlin 进行高级 Android 开发(developer.android.google.cn/courses/kot…)
1的具体进度:

developer.android.google.cn/courses/and… + developer.android.google.cn/courses/and… + Add a button to an app (google.cn)

知识点

1. val关键字声明的变量只能赋值一次;

2. var关键字声明可更改的变量;

3. 在输出语句中使用变量: ${变量名称}

var age = 365 * 8
println("You are already ${age}")
println("${age} is the very best age to celebrate!")
复制代码

4. repeat创建循环语句: repeat(循环次数){}

repeat(10){
    print("傻狗")
}
复制代码

5. 使用 IntelliJ IDEA 运行 Hello world : www.web3.xin/code/2230.h…

  • 一开始犯的错,创建1个Kotlin的class,然后在里面写main函数.导致一直找不到run/运行 按钮.
  • 应该创建一个Kotlin文件,不是class,直接在里面写main函数,可以运行

使用Kotlin语言创建Java工程.png

6. IntRange : 用于表示一组Int值的范围. 从A到B.

var i1 = 1..6
var i2:IntRange = 1..6

fun showRandom(){
    println(i1.random())
    println(i2.random())
    //可以直接创建1个IntRange实例
    println((1..6).random())
}
复制代码

7. 如果一个类要被继承,可以使用 open 关键字进行修饰

open class BaseActivity : AppCompatActivity() {}

class Jump : BaseActivity() {}
复制代码

8. Kotlin和Java代码互转

  1. Java文件转Kotlin文件
    • Code -> Convert Java File to Kotlin File
  2. Kotlin文件转Java文件
    • Tools -> Kotlin -> Show Kotlin ByteCode
    • Decompile

9. Class的写法

  1. Java中的Class实例,在Kotlin中写法是 ClassName::class.java
  2. Class实例作为方法参数,写法是 clazz:Class<*>
fun jump(clazz: Class<*>) {
    val intent = Intent(this, clazz)
    startActivity(intent)
}

fun J1(view: View) {
    val clazz = MainActivity::class.java
    jump(clazz)
}
复制代码

10. 静态函数

通过这个注解( @JvmStatic ), 将 object 和 companion object 的内部函数和属性,真正⽣生成为静态代码
open class T {
    companion object{
        @JvmStatic
        open fun f1():Unit{
        }
    }
}
复制代码

11. 如何定义静态常量

在 object 中用 const val 生命静态常量
object ObjectTest {
    const val a1:String = "111"
    open fun f1():Unit{
    }
}
复制代码
//编译为Java代码
public final class ObjectTest {
   @NotNull
   public static final String a1 = "111";
   @NotNull
   public static final ObjectTest INSTANCE;

   private ObjectTest() {
   }

   static {
      ObjectTest var0 = new ObjectTest();
      INSTANCE = var0;
   }
}
复制代码

12. 如何定义静态函数

Kotlin实现静态方法与静态变量的两种方式
object ObjectTest {
    @JvmStatic
    open fun f1():Unit{
    }
}
复制代码
//编译为Java代码
public final class ObjectTest {
   @NotNull
   public static final ObjectTest INSTANCE;
   @JvmStatic
   public static void f1() {
   }
   private ObjectTest() {
   }
   static {
      ObjectTest var0 = new ObjectTest();
      INSTANCE = var0;
   }
}
复制代码

13. Elvis 操作符 : 可以通过 ?: 的操作来简化 if null 的操作

?: 后面可以是: 指定属性为null时候的缺省值, return, throw 1个异常
var date = lesson?.date ?: "星期一"
var date = lesson?.date ?: return
var date = lesson?.date ?: throw new Exception("***")
复制代码

14. 位运算符

Kotlin 运算符

Kotlin支持的位运算符同样有如下7个。

  1. and: 按位与。当两位同时为 1 时才返回 1。
  2. or: 按位或。只要有一位为 1,即可返回 1。
  3. inv: 按位非。单目运算符,将操作数的每个位(包括符号位)全部取反 。
  4. xor: 按位异或。当两位相同时返回 0,不同时返回 1。
  5. shl: 左移运算符。
  6. shr: 右移运算符。
  7. ushr: 无符号右移运算符。

Kotlin 的位运算符只能对 Int 和 Long 两种数据类型起作用。

首先左移和右移的区别是很好区分的

左移<< :就是该数对应二进制码整体左移,左边超出的部分舍弃,右边补零。举个例子:253的二进制码1111 1101,在经过运算253<<2后得到1111 0100。很简单

右移>> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃。

无符号右移>>> :不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。

举例对比:
-5用二进制表示1111 1011,红色为该数标志位

-5>>2: 1111 1011-------------->1111 1110。
11为原有标志位1补充得到

-5>>>2: 1111 1011-------------->0011 1110。
左边部分总是以0填充 00为补充的0
复制代码

15. 循环控制

Kotlin 循环控制
for (int i = 1; i <= 10 ; i++) { }

for (int i = 1; i < 10 ; i++) { }

for (int i = 10; i >= 0 ; i--) { }

for (int i = 1; i <= 10 ; i+=2) { }

for (int i = 10; i >= 0 ; i-=2) { }

for (String item : collection) { }

for (Map.Entry<String, String> entry: map.entrySet()) { }

复制代码
for (i in 1..10) { }

for (i in 1 until 10) { }

for (i in 10 downTo 0) { }

for (i in 1..10 step 2) { }

for (i in 10 downTo 0 step 2) { }

for (item in collection) { }

for ((key, value) in map) { }
复制代码
文章分类
Android
文章标签