Kotlin 学习(kotlin 的基础语法)

前言

之前的时候再项目中使用过Kotlin 了,但是总感觉自己对于Kotlin 的认识有点浅薄。所以,专门重新学习了一下。

开发准备 :

  • 开发工具 : IntelliJ IDEA

  • 开发语言 : kotlin

  • 开发调整: 1. IntelliJ 默认字体很小,所以调大一些 2.设置IntelliJ 不区别大小写

  • 创建项目
    选择项目的时候勾选kotlin


    image.png

创建kotlin 主函数的时候,千万不要将自己创建的.kt 文件创建称为有一个类,而是创建成为一个文件。然后,在文件中直接使用主函数。


image.png

开始学习

main方法(主函数)

我们知道,在java 中任何方法都是从主函数开始运行的。主函数的写作方法如下:

public class Demos {
    public static void main(String[] args) {

    }
}

那么我吗知道,在kotlin 中使用主函数的话,是这个样子的:

fun main(arras: Array){
}

大家可以看见左侧的Demo.kt 是灰色的,那么很多的人就会感觉到特别的难受,所以,我们可以这个样子进行使用

class Demoss {
    companion object{
        @JvmStatic
        fun main(args:Array){
             }
    }
}

当然,经过我的测试,这个里面有三个注意点:

    1. 将文件内添加 companion objec{} ,这个代码块,相当于java 中的static关键字
  • 2.添加@JvmStatic 注解
  • 3.main函数必须是该模板的,当然参数名称可以修改,可以添加返回值

kotlin 文件也变为了一个类的形式进行展示,而不是.kt 的文件进行使用


image.png

方法(函数)

在kotlin 中方法的构建格式如下
fun 方法名(参数名:参数类型):返回值类型 { 代码块的内容 }

我们知道方法的构建,那么我们就坐几个小例子:

  • 要求 : 定义一个方法,计算机两个数的和
    那么我们这边根据模板套入得出如下的结果:
  fun sum(a: Int, b: Int) :Int{
        return a + b
    }

在其他的地方如果有人见到这个格式也需要知道和上方的结果一致:

  fun sumTow(a: Int, b: Int) = a + b

这里,我们先不说结论,继续下一个知识点。
大家可以看见main 函数和之前的方法构造不相同。那么就有人疑惑了,难道主函数和其他的函数不同吗?
原来,不是主函数和之前的函数不同,而是省略了返回值,我们这里,将返回值补上看一下。


主函数

原来,主函数是省略了返回值(Unit 和java 中的 void 一样,为无返回值类型)
我们再看上面,那么我们也将返回值加上,得出如下的结果

  fun sumTow(a: Int, b: Int):Int = a + b

这里,我们得出结论:
方法的变形格式为:
fun 方法名称(参数名称:参数类型):返回值类型 = 返回值结果
我们可以看见 如果使用等于号的时候,可以省略返回值类型,等于号就相当于代码块以及之内的return关键字

变量和常量

变量: 指的是可以变化的量
常量: 指的是不可变的量

在java 中变量是如何定义的?
变量类型 变量名 = 变量值;

如,这个int 类型的变量num ,值为20 :

 int num = 20;

那么,在kotlin 中如何使用的呢?

    var num = 20

这里,我们先说一下。var 是关键字,代表的是申明一个变量。如果想要使用的话那么直接使用 var 参数名= 参数值就可以了。
有人问了,var 是代表申明一个变量。但是这个变量什么类型都可以声明,那么如果想要申明一个int 类型的变量呢?
我们可以这个样子进行申明:

  var num : Int = 20

如果给这个变量赋值其他类型的值,那么就会出现如下的错误


变量规定类型后使用错误的类型进行使用

这个就是变量的使用,那么我们继续来说常量。
在java 中,如何定义常量?给想要的值添加final 关键字,final 关键字,代表的是 public static final ,所以是这个样子进行定义的:

    public  static  final  String result = "常量";

那么,在kotlin 中是如何定义的?

    val result = "常量"

如果对于这个值进行使用,那么会有如下的提示:


告诉我们,常量类型不可以修改,如果想要使用的话将类型转变为变量

注释

kotlin 中的注释和Java 中的注释一样,分为三种: 单行注释,多行注释和文档注释

    // 单行注释
    /*
    多行注释
     */
    /** 
     * 文档注释
     */

字符串模板

kotlin 中有一个字符串模板。

我自己认为字符串模板有两种样式:
样式1:“内容{引入内容}内容”
这里介绍一下:
样式1的内容代表的是要输入的内容代表的是要引入内容()中代表的是要引入数据,当然这个()是我加出来给大家看的,在代码中不需要添加 样式2的内容代表的是要输入的内容{}代表需要引入代码块,在代码块中设置数据

这里给大家看一些例子:

    var num : Int = 20
    fun print(){
        //输出数据
        var prints = "请输出要数据$num"
        var printss = "请计算结果${num+num}"
    }

条件表达式

在kotlin 中,如果是简单的语句,那么可以不添加代码块(也就是{})。当然,这个样子在java中不可以。比如,下面的这个例子:
java:

 int result(int a, int b) {
        if (a > b) {
            return a + b;
        } else {
            return a - b;
        }
    }

kotlin :

    fun result(a: Int, b: Int) = if (a > b) a + b else a - b

这里介绍一下,kotlin中只有 if (a > b) a + b else a - b 这个是条件表达式的样例,方法的例子只是回顾一下子,大家千万别将知识点混淆。

可空值和空检查

kotlin 中的可空值和空检查是什么呢?我们这里需要进行讲解。
可空值:代表的是在kotlin中值不再像java 中一样,比如:原先有一个字符串str ,之前的时候值是“内容”,如果不想进行使用,那么就可以将这个值设置为“null”。但是,在kotlin中,对于类型的检查更加的严格,如果你定义一个字符串类型的值,如果没有对于他添加可空值的标识,那么你在代码中将这个值设置为"null",那么代码就会报错。
比如:


提示显示的是null类型的值,不可以转为非null的类型

但是,如果我们想要在代码中进行设置,那么我们就可以使用?(可空值判断符)进行定义。


image.png

空检查:代表的是kotlin为了解决java 中特别常见的空指针异常,对于null(也就是空值)的一系列空安全检查机制。

类型检查和自动转换

首先和大家介绍一个类型Any。Any 大家可能会想到Anything 。所以,Any 和java 中的Object 类一样,都是代表所有类的基类。当时Any 绝对不是java 中的Object 。
上面的Any类型大家知道了,那么就开始正式的类型转换。


is 是类型检查,表示检查当前的类型是什么

大家可以看到,我在代码中使用的是一个is 关键字,代表的就是判断当前的类型。如,any 为字符串类型的。所以就可以直接进行自动的转换,使用字符串类型的方法。但是,如果没有判断类型,那么就算是相同的代码都不可以执行。

for 循环

我记得在学习java 的时候,我们就是第一天搭建环境,之后就学习循环,判断语法等。所以,我们这里先回顾一下java 中的for循环。

    // 普通 for 循环
        for (int i = 0 ; i < 30;i++){
            System.out.println("普通循环的内容");
        }
        // 死循环
        for (;;){
            System.out.println("死循环的内容");
        }

这里,我们看一下kotlin 的for 循环

       // 普通for 循环,这里的in ... until ... 代表的是从 开始的值,到结束的值。会输出 0-30,但是包含0,不包含30的结果。
            for (i in 0 until 30){
                print("普通for循环$i")
            }

    val items = listOf("apple", "banana", "kiwifruit")
            // 显示方式1: i 表示的是内容
            for (i in items){
                println(i)
            }
            // 显示方式2 : i 表示的是对象的下标值
            for (i in items.indices){
                println(i)
            }

当然,kotlin中for 循环不再死循环。

while 循环 和 do while 循环

在java 中,有着 while 循环和 do ... while 循环,在kotlin 中同样拥有。
java :

   // while 语句和 do ... while 语句的区别.while 语句
        // ,如果不满足就不会进入循环,但是do... while 语句会先执行一次,然后再进入
        //所以wehile 语句,最少不会执行,但是do... while与语句,最少会执行一次。
        // 总结: while 语句,先判断在执行,do。。。while 语句先执行再判断
        // while 循环,必须要设置一个知道不满足的时刻,否则会出现死循环
       int results = 20;
        while (results < 100){
            System.out.println("输出语句" + results);
            results++;
        }
        int resultss = 20;
        // do ... while 语句
        do {
            System.out.println("输出语句" +resultss );
            resultss++;
        }while (resultss < 100);

kotlin :

  var start = 20
            while (start < 200){
                start++
            }
            var starts = 200
            do {
                starts-- 
            }while (starts<20)

kotlin 中的while 和do.. while特别的类似,这里就不再进行介绍了。

when 表达式

when 表达式和java 中的switch 语句特别的相似,这里我们看一下。
java:

     String strs = "h";
        // case :表示判断类型的值
        // break : 表示跳出判断,如果不添加,那么就会继续执行
        // default : 标配是上述的都不满足的情况
        switch (strs){
            case "h":
                break;
            case  "0":
                break;
            case  "a":
                break;
            default:            
        }

kotlin 的when语句:

    var strss = 1
            when (strss) {
                1 -> 1
                2 -> 2
                3 -> { 3}
                4 -> { 4}
                else -> { 0}
            }

这里 ->表示的是要显示的结果。

范围

刚才在上面的时候我们看过for循环中有 for(i in 0 until 30)这个操作,那么我们再看一下,其他的方式

   val ints = 0..20
            for ( i in ints){
                println(" 当前的数是 $i")
            }

这里解释一下。 0 .. 20 ,代表的是一个范围 。和until不同的是,0..20 代表从0-20包含20。而0 until 20 代表的是从0-20不包含20。

集合的使用

这里既然说到集合的使用,那么先说一下kotlin 中的集合。
kotlin 中集合的创建:

   // Arraylist 的创建,和java 中 ArrayList 一样,只不过去除了关键字 new
            val lists = ArrayList()
            // 添加数据
            lists.add("apple")
            lists.add("banana")
            // kotlin 特有的,有点像java 中数组的添加方式
            val listss = arrayListOf("苹果","香蕉")

kotlin 中集合的遍历:

    // Arraylist 的创建,和java 中 ArrayList 一样,只不过去除了关键字 new
            val lists = ArrayList()
            // 添加数据
            lists.add("apple")
            lists.add("banana")
            lists.add("abcedgf")
            // kotlin 特有的,有点像java 中数组的添加方式
            val listss = arrayListOf("苹果", "香蕉")
            // for 循环遍历
            for (i in lists) {
                println(i)
            }
            // when 循环
            when {
                "apple" in lists -> {
                }
                "banana" in lists -> {
                }
            }
            // 使用 fifter 的时候
            lists.
                // 进行筛选
                filter {
                    // 判断内容是否是以a字母开头
                    it.startsWith("a")
                }
                    // 按照字母顺序排列原有的字符串
                .sortedBy { it }
                .map {
                    // 将内容转化为大写
                    it.toUpperCase()
                }
                // 打印
                .forEach { println(it) }

这里介绍的是三种方式: 我经常使用的是第一种,第三种,第二种就。。。。。。算了吧!

创建类以及实例

大家知道,在java 中创建类那么就需要使用new 关键字来进行实例,那么我们就来对比一下java 和 kotlin 创建类的使用场景。
java :创建StringBuffer 的实例

      StringBuffer stringBuffer = new StringBuffer();

kotlin : 创建StringBuffer的实例

var sb :StringBuffer = StringBuffer()

总结:这里我们创建实例,不需要在添加new 关键字。

结尾的话:

这里我们先介绍一下kotlin 的基础语法。当然了,这里的内容来自 kotlin官网 ,我只是把那里的内容翻译了一下,然后加了一些自己的想法。如果大家认为哪儿有问题,请给我留言,我一定会及时改正的。

你可能感兴趣的:(Kotlin 学习(kotlin 的基础语法))