2024年Kotlin基础

println("a = " + a)
println("a = $a")    println("b = ${b+1}")

}


        Kotlin的类型推导机制并不能总是可以在正常工作,比如说如果我们对一个变量**延迟赋值**的话,Kotlin就无法自动推导它的类型了。这时候就需要**显式地声明**变量类型才行。


        每行的代码不需要像Java一样加分号。       


        打印日志中的第二种写法和Dart(Flutter开发语言)相似,在“$”字符后方添加要打印的数据即可,若后方不是参数(如表达式),需要在外围使用“{}”字符包裹。


        Kotlin完全抛弃了Java中的基本数据类型,全部使用了**对象数据类型**。




![c68c8f88056743e1bd834ad22ee28771.png](https://img-blog.csdnimg.cn/direct/c68c8f88056743e1bd834ad22ee28771.png)


###  2. 函数


        函数和方法是同一个概念,只是不同语言的叫法习惯不一样而已。Java中方法的叫法更普遍一些,Kotlin中函数的叫法更普遍一些。


**fun**(function的简写)是定义函数的关键字,无论定义什么函数,都一定要使用fun来声明。参数括号后面的那部分是可选的,用于声明该函数会返回什么类型的数据,上述示例就表示该函数会返回一个Int类型的数据。如果函数不需要返回任何数据,这部分可以直接不写。


        Kotlin函数的**语法糖**:当一个函数中只有一行代码时,Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。使用这种语法,return关键字也可以省略了,等号足以表达返回值的意思。由于param1 + param2返回的是一个Int值,而在函数的尾部又使用等号连接了param1 + param2,因此Kotlin可以推导出函数返回的必然也是一个Int值,这样就不用再显式地声明返回值类型了,代码可以进一步简化。




fun methodName(param1: Int, param2: Int): Int {
return param1 + param2
}

fun methodName(param1: Int, param2: Int): Int = param1 + param2

fun methodName(param1: Int, param2: Int) = param1 + param2


##### 函数的可见性修饰符



        Java中有
public
、
private
、
protected
和
default
(什么都不写)这4
种函数可见性修饰符。
Kotlin
中也有
4
种,分别是
**public**
、
**private**
、
**protected**
和**internal**,需要使用哪种修饰符时,直接定义在
fun关键字的前面即可。Kotlin抛弃了Java中的default可见性(同一包路径下的类可见),引入了一种新的可见性概念,只对同一模块中的类可见,使用的是internal修饰符。比如我们开发了一个模块给别人使用,但是有一些函数只允许在模块内部调用,不想暴露给外部,就可以将这些函数声明成internal。 
 

![](https://img-blog.csdnimg.cn/direct/dc9bf5f7dac543fa8e89f371218ccfa7.png)

## 五、程序的逻辑控制


        程序的执行语句主要分为3种:**顺序语句**、**条件语句**和**循环语句**。


####    1. **if**条件语句



         Kotlin中的条件语句主要有两种实现方式: 
 **if**和 
 **when**。 
   
         Kotlin中的if语句和Java中的if语句几乎没有任何区别。 
 

fun largerNumber(num1: Int, num2: Int): Int {
var value = 0
if (num1 > num2) {
value = num1
} else {
value = num2
}
return value
}



         Kotlin中的if语句相比于Java有一个额外的功能,它是可以有返回值的,返回值就是if语句每 
 

 一个条件中最后一行代码的返回值。因此,上述代码就可以简化成如下形式: 
 

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2


####    2. **when**条件语句



         Kotlin中的when语句有点类似于Java中的switch语句,但它又远比switch语句强大得多。当判断条件非常多的时候,就应该考虑使用when语句 
 


fun getScore(name: String) = when (name) {
//匹配值 -> { 执行逻辑 }
“Tom” -> 86
“Jim” -> 77
“Jack” -> 95
“Lily” -> 100
else -> 0
}



         除了 
 **精确匹配**之外,when语句还允许进行 
 **类型匹配**。 
 


fun checkNumber(num: Number) {
when (num) {
is Int -> println(“number is Int”)
is Double -> println(“number is Double”)
else -> println(“number not support”)
}
}



         上述代码中, 
 **is**关键字就是类型匹配的核心,它相当于Java中的 
 **instanceof**关键字  
 

         when语句还有一种 
 **不带参数**的用法,虽然这种用法可能不太常用,但有的时候却能发挥很强的 
 **扩展性**。 
 


fun getScore(name: String) = when {
name == “Tom” -> 86
name == “Jim” -> 77
name == “Jack” -> 95
name == “Lily” -> 100
else -> 0
}


####    3. 循环语句




         Kotlin提供了 
 **while**循环和 
 **for**循环两种循环语句。其中while循环不管是在语法还是使用技巧上都和Java中的while循环没有任何区别。 
 

         Kotlin在for循环方面做了很大幅度的修改,Java中最常用的for-i循环在Kotlin中直接被舍弃 
 
 了,而Java中另一种for-each循环则被Kotlin进行了大幅度的加强,变成了for-in循环,所以我们只需要学习 
 **for-in**循环的用法就可以了。 
 

         Kotlin通过以下代码形式来表示一个 
 **区间**。下方代码创建了一个0到10的区间,并且两端都是闭区间,这意味着0到10这两个端点都是包含在区间中的,用数学的方式表达出来就是[0, 10]。其中,“ 
 **..**”是创建两端闭区间的关键字。 
 



val range = 0…10 //[0, 10]


遍历区间:



fun main() {
for (i in 0…10) {
println(i)
}
}




         但是在很多情况下,双端闭区间却不如单端闭区间好用。Kotlin中可以使用 
 **until**关键字来创建一个 
 **左闭右开**的区间,如下所示: 
 


val range = 0 until 10 //[0, 10)



         如果你想跳过其中的一些元素,可以使用 
 **step**关键字: 
 


fun main() {
//相当于for-i循环中i = i + 2的效果
for (i in 0 until 10 step 2) {
println(i)
}
}



         如果想创建一个 
 **降序**的区间,可以使用 
 **downTo** 关键字,用法如下: 
 

fun main() {
for (i in 10 downTo 1) { //[10, 1]
println(i)
}
}


## 六、面向对象编程


###  1. 类与对象



//为什么有一个open关键字往下看
open class Person {
var name = “”
var age = 0

fun eat() {
    println("$name is eating. He is $age years old.")
}

}

fun main() {
val p = Person()
p.name = “Jack”
p.age = 19
p.eat()
}


###  2. 继承与构造函数




         学生是人,学生也有名字和年龄,也需要吃饭。接下来创建一个Student类继承Person类。这样Student就自动拥有了Person中的字段和函数,另外还可以定义自己独有的字段和函数。 
 


         Kotlin中任何一个 
 **非抽象类**默认都是不可以被继承的,相当于Java中给类声明了final关键字。之所以这么设计,其实和val关键字的原因是差不多的,因为类和变量一样,最好都是不可变的,而一个类允许被继承的话,它无法预知子类会如何实现,因此可能就会存在一些未知的风险。 
 

         让它可以被继承通过在Person类的前面加上 
 **open**关键字实现,这相当于主动告诉Kotlin编译器,Person这个类是专门为继承而设计的。 
 


         要让Student类继承Person类。在Java中继承的关键字是extends,而在Kotlin中变成了一个冒号。 
 




class Student : Person() { //为什么父类需要带上一个括号往下看
var sno = “”
var grade = 0
}



         Kotlin将构造函数分成了两种: 
 **主构造函数**和 
 **次构造函数**。 
 
         主构造函数是最常用的构造函数,每个类默认都会有一个不带参数的主构造函数,当然也可以显式地给它指明参数。将参数在主构造方法中声明后,实例化当前类就必须传入构造方法中的所有参数。主构造函数的特点是没有函数体,直接定义在类名的后面即可。Kotlin提供了一个 
 **init**结构体,有主构造函数中的逻辑都可以写在里面。比如下面这种写法:          
 


class Student(val sno: String, val grade: Int) : Person() {
init {
println(“sno is $sno”
println(“grade is $grade”)
}
}
文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值