kotlin笔记第一阶段(变量&语句&函数)
笔记所在视频地址
02、Kotlin语言成为Android第一语言
03、Kotlin语言和JVM虚拟机
04、学Kotlin语言的重要性
05、 kotlin语言的跨平台特性
06、Kotlin语言学习的技巧
07、kotlin语言声明变量于内置数据类型
package com.derry.s1
// TODO 07.kotlin语言声明变量于内置数据类型
fun main() {
println("Hello world")
//TODO ============= 声明变量
/*
可读可改 变量名 类型 值 (kotlin声明变量与java相反是先声明变量名,在声明类型。)
var name : String = "Derry"
*/
var name : String = "Derry"
name = "Lance"
println(name)
//TODO ============= 内置数据类型
/*
String 字符串
Char 单字符
Boolean true/false
Int 整形
Double 小数
List 集合
Set 无重复的元素集合
Map 键值对的集合
Int ---> java int (编译器在编译过程中会将kotlin的Int类最终转成java的int)
Float ---> java float (编译器在编译过程中会将kotlin的Float类最终转成java的float)
其他类似
*/
08.kotlin 语言的只读变量
// TODO 08.kotlin语言的只读变量
fun main() {
// var info :String = "Mhyinfo"
// var 默认提示:变量永远不会修改,建议改为 val == 不可改变的(只读
val info :String = "Mhyinfo"
println(info)
/*
只读 变量名 类型 值
val age : Int = 99
*/
val age : Int = 99
println(age)
}
4.kotlin 语言的类型推断
// TODO 08.kotlin语言的类型推断
fun main() {
//提示:Explicitly given type is redundant here
// 显示给定的类型在这里是多余的
val info : String = "Derry is Success"
println(info)
val age = 98
println(age)
val xxx = "A"
}
5.kotlin语言的编译时常量
// TODO 10.kotlin语言的编译时常量
const val PI = 3.1415926 // 定义编译时常量
// TODO 10.kotlin语言的编译时常量
// 编译时常量只能是常用的数据类型:(String. Double. Int. Float. Long. Short. Byte. Char. Boolean)
// 编译时常量只能在函数之外定义,为什么? 答:如果在行数之内定义,就必须在运行时才能调用函数赋值,何来编译时常量一说
// 结论:编译时常量只能在函数之外定义,就可以在编译期间初始了
fun main() {
val a = "Derry info" //这个称为 只读类型的变量
// 提示:修饰符constant不适用于 局部变量
// const val PI = 45
// const val PI2 = 3.1415 //定义编译时常量
}
11.学习查看Kotlin反编译后字节码
查看Kotlin反编译后字节码方法
const val PI1 = 3.1415926
const val PI2 = 3.1415926
const val age = 3.1415926
// TODO 10.学习查看Kotlin反编译后字节码
fun main() {
val name = "Derry"
val number = 108
val number2 = 208
val isOK = false
}
反编译后的字节码文件(编译器在编译过程中会将kotlin代码转成java代码)
// D : double类型
public final static D PI1 = 3.1415926
// ================com/derry/s1/KtBase11Kt.class =================
// class version 50.0 (50)
// access flags 0x31
public final class com/derry/s1/KtBase11Kt {
// access flags 0x19
public final static D PI1 = 3.1415926
// access flags 0x19
public final static D PI2 = 3.1415926
// access flags 0x19
public final static D age = 3.1415926
// access flags 0x19
public final static main()V
L0
LINENUMBER 10 L0
LDC "Derry"
ASTORE 0
L1
LINENUMBER 11 L1
BIPUSH 108
ISTORE 1
L2
LINENUMBER 12 L2
SIPUSH 208
ISTORE 2
L3
LINENUMBER 13 L3
ICONST_0
ISTORE 3
L4
LINENUMBER 14 L4
RETURN
L5
LOCALVARIABLE isOK Z L4 L5 3
LOCALVARIABLE number2 I L3 L5 2
LOCALVARIABLE number I L2 L5 1
LOCALVARIABLE name Ljava/lang/String; L1 L5 0
MAXSTACK = 1
MAXLOCALS = 4
// access flags 0x1009
public static synthetic main([Ljava/lang/String;)V
INVOKESTATIC com/derry/s1/KtBase11Kt.main ()V
RETURN
MAXSTACK = 0
MAXLOCALS = 1
@Lkotlin/Metadata;(mv={1, 1, 16}, bv={1, 0, 3}, k=2, d1={"\u0000\u0010\n\u0000\n\u0002\u0010\u0006\n\u0002\u0008\u0003\n\u0002\u0010\u0002\n\u0000\u001a\u0006\u0010\u0004\u001a\u00020\u0005\"\u000e\u0010\u0000\u001a\u00020\u0001X\u0086T\u00a2\u0006\u0002\n\u0000\"\u000e\u0010\u0002\u001a\u00020\u0001X\u0086T\u00a2\u0006\u0002\n\u0000\"\u000e\u0010\u0003\u001a\u00020\u0001X\u0086T\u00a2\u0006\u0002\n\u0000\u00a8\u0006\u0006"}, d2={"PI1", "", "PI2", "age", "main", "", "Kotlin_Text"})
// compiled from: KtBase11.kt
}
// ================META-INF/Kotlin_Text.kotlin_module =================
com.derry.s1
KtBase11Kt
12、Kotlin语言的引用类型学习
// TODO 12.Kotlin语言的引用类型学习
// Java语言有两种数据类型
// 第一种:基本类型:int double等
// 第二种:引用类型 String等
// Kotlin语言只有一种数据类型
// 看起来都是引用类型,实际上编译器会在Java字节码中,修改成"基本类型"
fun main() {
val age: Int = 99
val PI: Float = 3.1415f
val PI2: Double = 3.1415
val isOK: Boolean = true
}
以下进入kotlin语法阶段
13、Kotlin语言的range表达式
// TODO 13.Kotlin语言的range表达式
fun main() {
val number = 148
//range 范围 从哪里 到哪里
if(number in 10..59){
println("不及格")
} else if (number in 0..9){
println("不及格且分数很差")
} else if(number in 60..100){
println("合格")
} else if (number !in 0..100){
println("分数不在0到100范围内")
}
}
14、Kotlin语言when表达式
// TODO 14.Kotlin语言when表达式
fun main() {
val week = 8
//Java的 if 语句
//KT 的 if 是表达式 有返回值的
val info = when(week){
1 -> "今天是星期一,非常忙碌的一天开会"
2 -> "今天是星期二,非常辛苦的写需求"
3 -> "今天是星期三,努力写Bug中"
4 -> "今天是星期四,发布版本到凌晨"
5 -> "今天是星期五,淡定喝茶,一个Bug改一天"
6 -> "今天是星期六,稍微加加班"
7 -> "今天是星期七,看剧中,游玩中"
//else -> "养猪去了,忽略星期几" 这样返回值一定是String类型,因为全为Sting类型
else -> {
println("养猪去了,忽略星期几") //这样写类型是Any == Object(相当于Java中的Object)
}
}
println(info) //void 关键字 无返回 用Unit类代替了java的void关键字
}
15、Kotlin语言的String模板
// TODO 15、Kotlin语言的String模板
fun main() {
val garden = "黄河公园"
val time = 6
println("今天天气很晴朗,去${garden}玩,玩了$time 小时") // 字符串模板的写法
//Java的写法(对比) println("今天天气很晴朗,去"+ garden +"玩,玩了"+ time +"小时")
//KT的if是表达式,所以更灵活。 Java的if是语句,还有局限性
val isLogin = true
println("server response result: ${if (isLogin)"恭喜你,登录成功√" else "不恭喜,你登录失败了,请检查Request信息"}")
}
16、Kotlin语言的函数头学习
//TODO 16、Kotlin语言的函数头学习
fun main() {
method01(99,"lisi")
}
// 函数默认都是public
// 其实Kotlin的函数,更规范,先有输入,再有输出
private fun method01(age: Int, name: String):Int{
println("你的姓名是:$name,你的年龄是:$age")
return 200
}
/* 上面的Kt函数,背后会变成下面的Java代码:
public static final int method01(int age, String name){
String var2 = "你的名字是:"+ name + ",你的年龄是:" + age;
System.out.print(var2);
return 200;
}
*/
/*
private static final int method01(int age, String name) {
String var2 = "你的姓名是:" + name + ",你的年龄是:" + age;
boolean var3 = false;
System.out.println(var2);
return 200;
}
}
*/
17、Kotlin中函数参数的默认参数
package com.derry.s1
// TODO 17、Kotlin中函数参数的默认参数
fun main() {
action01("lisi",89)
action02("wangwu")
action03()
action03("赵六",76)
}
private fun action01(name: String,age:Int) {
println("我的姓名是:$name,我的年龄是$age")
}
private fun action02(name: String,age:Int = 77) {
println("我的姓名是:$name,我的年龄是$age")
}
private fun action03(name: String = "王五",age:Int = 77) {
println("我的姓名是:$name,我的年龄是$age")
}
18、Kotlin语言的具名函数参数
package com.derry.s1
//TODO 18、Kotlin语言的具名函数参数
fun main() {
loginAction(age = 99,userpwd = "123",usernam = "de",username = "Darry",phonenumber = "123456")
}
private fun loginAction(username: String,userpwd:String,phonenumber:String,age:Int,usernam:String){
println("username:$username, userpwd:$userpwd, phonenumber:$phonenumber, age:$age")
}
19、Kotlin语言的Unit函数特点
// TODO 19、Kotlin语言的Unit函数特点
fun main() {
}
// : Unit不写,默认也有。Unit代表 无参数返回的 忽略类型 == Unit 类型类
// 相当于Java语言的void关键字(但不是,是一个类)
// (void是一个无参数返回的 忽略类型 但是它是关键字,不是类型,这很矛盾)
private fun doWork(): Unit{
return println()
}
private fun doWork2(){
return println()
}
private fun doWork3()/*: Unit*/{
println()
}
20、Kotlin语的Nothing类型特点
// TODO 20、Kotlin语的Nothing类型特点
fun main() {
show(60)
}
private fun show(number: Int){
when(number){
-1 -> TODO("没有这种分数")
in 0..59 -> println("分数不及格")
in 60..70 -> println("分数及格")
in 71..100 -> println("分数优秀")
}
}
interface A{
fun show()
}
class AImpl :A{
override fun show() {
// 下面这句话,不是注释提示,会终止程序的
TODO("Not yet implemented")
}
}
21、Kotlin语言的反引号中函数名特点
// TODO 21、Kotlin语言的反引号中函数名特点
fun main() {
// 第一种情况
`登录功能 2021年8月8日测试环境下 测试登录功能 需求编码人员Derry`("Derry","123456")
// 第二种情况: // in is 在Kotlin里面是关键字,怎么办? 使用反引号
KtBase_21.`is`()
KtBase_21.`in`()
// 第三种情况,很少发生
}
private fun `登录功能 2021年8月8日测试环境下 测试登录功能 需求编码人员Derry`(name : String ,pwd: String){
println("模拟登录$name, 密码:$pwd")
}
private fun `65465655475`(){
// 写了很复杂的功能,核心功能
// ...
}
// 公司加密私有的文档 65465655475 == 此函数的作用 xxxx
// 公司加密私有的文档 55576575757 == 此函数的作用 xxxx
public class KtBase_21 {
// in is 在java里面是普通函数
public static final void in() {
System.out.println("In run success");
}
public static final void is() {
System.out.println("In run success");
}
}
22、对前面所学内容,小结篇
(变量&语句&函数)快速回顾小结