kotlin笔记-Ricky

1、kotlin教程:https://www.runoob.com/kotlin/kotlin-tutorial.html
2、var:变量;val:常量
3、常量与变量都可以没有初始化值,但是在引用前必须初始化
4、字符串模板:$ 表示一个变量名或者变量值、 v a r N a m e 表 示 变 量 值 、 varName 表示变量值、 varName{varName.fun()} 表示变量的方法返回值:
5、NULL检查机制:字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回为null或配合?:做空判断处理
6、if (i in 1…10) { // 等同于 1 <= i && i <= 10
7、for (i in 1…4 step 2) print(i) // 输出“13”
8、for (i in 4 downTo 1 step 2) print(i) // 输出“42”
9、for (i in 1 until 4) { // i in [1, 4) 排除了 4 使用 until:123
10、在 Kotlin 中,三个等号 === 表示比较对象地址,两个 == 表示比较两个值大小。
11、和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号 ’ 包含起来的。比如普通字符 ‘0’,‘a’。
12、布尔用 Boolean 类型表示,它有两个值:true 和 false。
13、数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数。//[1,2,3] val a = arrayOf(1, 2, 3) //[0,2,4] val b = Array(3, { i -> (i * 2) })
14、for (c in str) {
15、Kotlin 支持三个引号 “”" 扩起来的字符串,支持多行字符串
16、String 可以通过 trimMargin() 方法来删除多余的空白。
17、在 when 中,else 同 switch 的 default。如果其他分支都不满足条件将会求值 else 分支。
18、 kotlin文件:灰色的是一个文件写了多个类,蓝色的只有一个类,橙黄色就是没有类;
19、函数定义关键字:fun
20、函数的变长参数关键字:vararg
21、匿名函数名:lambda
22、可变常量:var
23、不可变变量:val(只能赋值一次的变量(类似Java中final修饰的变量))
24、【com.okfunc:netkit:1.1.5】封装okhttp的网络框架;自己封装网络框架jar包???
25、丝瓜视频网络框架采用:封装过的okhttp
26、android Studio封装aar包或jar包教程:https://blog.csdn.net/u013519290/article/details/82365284
27、为什么自己封装的,网络能找到?
28、aar与jar区别:
a、.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。
b、
.aar:包含所有资源,class以及res资源文件全部包含
29、android studio 用gradle下载jar文件目录:原来在C:\Users\(你的用户名).gradle\caches\modules-2\files-2.1目录下,使用gradle引用lib会先查看本地缓存是否有,没有直接去网站下载,下载后的jar文件保存在.gradle的缓存目录中。
30、密封类:sealed class
31、匿名内部类:object class
32、数据类:data class
33、内部类:inner class
34、抽象类:abstract
35、枚举类:enum
36、注解类:annotation
37、private:仅在同一个文件中可见
38、protected:同一个文件中或子类可见
39、public:所有调用的地方都可见
40、internal:同一个模块中可见
41、Kotlin中没有添加修饰符直接以class开头的都是final类。final是不能被继承的
42、Kotlin中如果一个类需要能被继承,必须在类声明处使用open关键字
43、Kotlin接口默认是打开的;也就是open
44、Kotlin不需要使用变量用下划线代替
45、Kotlin的抽象类和接口一样:abstract、interface
46、Kotlin的枚举类和Java一样,每个枚举都是枚举类的实例,它们可以被初始化,不能有其他类型
47、Kotlin的密封类枚举类的扩展:可以有子类,但是所有子类必须继承密封类
48、Kotlin的内部类:kotlin的内部类默认是final,不能持有外部类的状态,用inner标记,可以访问外部成员。内部类对外部类的对象有一个引用。
49、Kotlin的object类:可以使用object关键字声明一种特殊的类,这个类只有一个实例,所以这个类里面的成员默认都是static的。
50、Kotlin完整的类声明:class 类名 [可见性修饰符] [注解] [constructor] (Params)--------class Person private @Inject constructor(name: String)
51、Kotlin主构造函数是不能包含任何代码的,但是有时候我们又需要在构造函数中做一些初始化操作,Kotlin引入了初始化代码块,
用关键字init声明,需要在主构造函数中初始化的操作可以放在初始化代码块中;
52、Kotlin中,函数的参数是可以设置默认值的,如果调用的实话不传对应参数,就使用默认值,主构造函数声明类属性也一样,也可以设置默认值。
53、Kotlin中,类也可以有次构造函数,次构造函数的类体中用关键字constructor声明;
54、Kotlin中,非抽象方法如果要类子类实现,需要声明为open
55、完全解析Kotlin中的注解:https://www.jianshu.com/p/8392c63b0f52
56、【Kotlin学习笔记目录】:https://www.jianshu.com/p/baa78f1c28eb
57、android常见注解:
[1]:
[2]:
[3]:
58、kotlin中,val相当于java的final,const val相当于public final static
59、kotlin中的可空类型:var n:Int ?= 10 n=null//可以接收空值(null)
60、可空类型使用时的一些限制:
[1]、不能直接调用可空类型对象的函数或属性;
[2]、不能把可空类型数据赋值给非空类型变量;
[3]、不能把可空类型数据传递给非空类型参数的函数;
61、为了“突破”这些限制,kotlin提供了如下运算符:
[1]、安全调用运算符(?.)
[2]、安全转换运算符(as?)
[3]、Elvis运算符(?😃
[4]、非空断言(!!)
[5]、还有一个let函数帮助处理可空类型数据
62、kotlin原始字符串:val b = “”“你\n好”"" 你\n好
63、kotlin字符串查找:
[1]、indexOf:从前往后查找字符或字符串,返回第一次找到的字符或字符串所在处的索引,没找到返回-1.
[2]、lastIndexOf:从后往前查找字符或字符串,返回第一次找到字符或字符串所在处的索引,没有找到返回-1.
64、kotlin字符串比较大小:compareTo函数按字典顺序比较两个字符串;
65、kotlin字符串截取:substring
66、kotlin的可变字符串:StringBuilder:append(添加)、insert(插入)、delete(删除)、replace(替换)
67、-> 箭头 用来声明Lambda表达式。
68、分支结构:if和when
69、循环结构:while、do-while和for
70、跳转结构:break、continue和return
71、kotlin区间表示:
[1]、…闭区间:for (x in 0…5)// 定义闭区间,包括0和5
[2]、until半闭半开区间:for (x in 0 until 5)// 定义半开区间,包括0但不含5
[3]、 in 关键字可以判断一个数值是否在区间中
[4]、 !in 关键字则是判断一个值是否不在区间中
72、kotlin函数关键字是fun:fun 函数名(参数列表): 返回值类型 {函数体 return 返回值}
73、kotlin函数无返回数据类型:可以是Unit类型,也可以不写;
74、kotlin一个参数采用了命名参数形式传递,那么其后的所有参数都必须采用命名参数形式传递,除非它是最后一个参数。如:printArea(width = 320.0, 480.0)// 编译错误
75、kotlin:在声明函数时可以为参数设置一个默认值,当调用函数的时候可以忽略该参数。即如果调用者没有传递参数,则使用默认值。
76、kotlin如果在函数体中表达式能够表示成单个表达式时,那么函数可以采用更加简单的表示方式。如:fun rectangleArea(width: Double, height: Double) = width * height
77、kotlin可以有顶层函数,及内部函数:声明再类内部和另外一个函数的内部;
78、kotlin的委托:A by B的意思为A委托给B
79、kotlin扩展函数:fun 接收类型.函数名(参数列表): 返回值类型
80、kotlin主构造函数:主构造函数在类头中或类名后声明,使用关键字constructor.主构造函数本身不能包含代码,所以需要借助于初始化代码块,在init代码块中可以进行主构造函数需要的初始化处理;
81、kotlin:如果一个非抽象类中根本看不到任何的构造函数,编译器会为其生成一个默认的构造函数,既:无参数public的主构造函数。
82、Any是kotlin所有类的根类,kotlin中所有的类都直接或间接的继承Any类。
83、使用data声明数据类的主构造函数中,参数一定要声明为val或var,不能省略。
84、kotlin的内部类是一种特殊的嵌套类,内部类可以访问外部类属性、函数,因为内部类持有外部类引用。内部类的声明需要在class前面加inner关键字。
85、kotlin在内部类中this引用当前内部类对象"内部类属性 x = ${this.x}",而要引用外部类对象需要使用this@类名"外部类属性 x = ${this@Outer.x}"
86、kotlin外部调用内部类方法:val inner1 = Outer().Inner() inner1.display()
87、object关键字有三方面的应用:对象表达式、对象声明、伴生对象;
88、object关键字可以声明对象表达式,对象表达式用来替代Java中的匿名内部类,如:view.handler(object :OnClickListener {
89、子类继承父类时,子类可以重写父类总的成员属性,默认情况下时不能被重写的,父类属性需要声明为open,子类属性需要声明为override
90、子类继承父类之后,子类访问父类属性,需要通过super.调用。如:“super.x = ${super.x}”
91、发生多态要有三个前提条件:
[1]、继承:多态发生一定要在子类和父类之间。
[2]、重写:子类重写父类的函数。
[3]、声明对象类型是父类类型,对象是子类的实例。
92、obj is type // obj对象是type类型实例,则返回true
93、obj !is type // obj对象不是type类型实例,则返回true
94、kotlin将父类引用类型变量转换为子类类型,这种转换称为向下转型,需要使用as或!as运算符进行强制转换;
95、kotlin密封类(sealed)本身就是抽象类不需要使用abstract修饰,一定也是open的,密封类不能实例化;
96、kotlin密封类(sealed)是一种特殊的抽象类:密封类的子类是固定的;
97、kotlin:一个函数可以作为另外一个函数的参数或返回值,那么这个函数就是“高阶函数”
98、函数类型:就是把函数参数列表中的参数类型保留下来,再加上箭头符号和返回类型,
areaFunction声明的类型(Double,Double)->Double
99、函数字面量:函数类型声明的变量就是函数字面量。
100、函数字面量的三种表示:
1)、函数引用。引用到一个已经定义好的、有名字的函数,::函数名
2)、匿名函数。没有名字的函数即匿名函数。
3)、Lambda表达式。Lambda表达式是一种匿名函数。
101、Lambda表达式是一种匿名函数,可以作为表达式、函数参数和函数返回值使用。
102、Lambda表达式的语法很灵活,它的标准语法格式:{参数列表->Lambda 体}
103、参数类型推导简化:{a:Int,b:Int -> a+b}//标准类型的Lambda表达式;{a,b -> a + b}//简化版
104、如果一个函数的最后一个参数是lambda表达式,那么这个Lambda表达式可以放在函数括号之后:calculatePrint(10, 5, ‘+’) { a, b -> a + b }
105、如果Lambda表达式的[参数只有一个],并且能够根据上下文环境推导出它的数据类型,那么这个参数声明可以省略,在Lambda体中使用[隐式参数it]替代lambda表达式的参数:reversePrint(“hello”) { it.reversed() }
106、闭包是一种特殊的函数,它可以访问函数体之外的变量,这个变量和函数一同存在,即使已经离开了它的原始作用域也不例外。
107、闭包可以访问函数体之外的变量,这个过程称为捕获变量
108、内联函数解决:Lambda表达式在编译时被编译成一个匿名类,每次调用函数时都会创建一个对象,如果被函数反复调用则创建很多对象,会带来运行时的额外开销。
109、Kotlin的异常有3种:Exception、Error、Throwable.Exception与Error都继承Throwable。
110、Java中的异常分为两类,受检查异常和运行时异常;而kotlin中时运行时异常;
111、throwable类:
1)、message属性。保存发生错误或异常时的详细信息。如:println(“message : ${throwable.message}”)
2)、printStackTrace函数。打印错误或异常堆栈跟踪信息。如:println(“printStackTrace() 输出堆栈信息:”)
3)、toString函数。打印错误或异常对象的描述。如:println(“toString() : ${throwable.toString()}”)
112、Error是程序无法恢复的严重错误,程序员根本无能为力,只能让程序中止。例如:Java虚拟机内部错误、内存溢出和资源耗尽等严重情况。
113、Exception是程序可以恢复的异常,它是程序员所能掌控的。例如:除零异常、空指针访问、网络连接中断和读取不存在文件等。
114、在kotlin中,很多情况下[try-catch语句]被[try-catch表达式]替代,kotlin中提倡使用try-catch表达式,这样会使代码更简洁。如:
fun divide(number:Int,divisor:Int):Int=try{number/divisor}catch(e: ArithmeticException){0}
115、捕获异常顺序与catch代码块顺序有关系,一般先捕获子类,后捕获父类;
116、多个语句放在一个try的缺陷是:当第一个语句发生异常时,其他两个语句不会关闭;
117、kotlin线程类是Thread、函数是thread、函数参数start是创建完成线程后马上启动;
函数参数isDarmon是守护线程,守护是一种长期运行后台的线程;
函数参数contextClassLoader是类加载器,用来加载一些资源等;
函数参数name是指定线程名,如不指定,系统会分配一个线程名;
函数参数priority是设置线程优先级;
函数参数block是线程体;
118、join(等待线程结束):join()函数等待该线程结束;
119、线程让步函数:yield,调用yield函数能够使当前线程给其他线程让步。
120、线程停止;sleep,线程休眠一段时间再执行。
130、kotlin协程:协程是一种轻量级的线程,它提供了一种不阻塞线程,但是可以被挂起的计算过程。
131、kotlin调用java类时,需要JavaClass.‘object’
132、字节输入流的根类时InputStream,它的子类如下:
1)、FileInputStream:文件输入流
2)、ByteArrayInputStream:面向字节数组的输入流
3)、PipedInputStream:管道输入流,用于两个线程之间的数据传递
4)、FilterInputStream:过滤输入流,它是一个装饰器,用来扩展其他输入流
5)、BufferedInputStream:缓冲区输入流,它是FilterInputStream的子类
6)、DataInputStream:面向基本数据类型的输入流
133、字节输出流的根类是OutputStream,它的子类如下:
1)、FileOutputStream:文件输出流
2)、ByteArrayOutputStream:面向字节数组的输出流
3)、PipedOutputStream:管道输出流,用于两个线程之间的数据传递
4)、FilterOutputStream:过滤输出流,它是一个装饰器,用来扩展其他输出流
5)、BufferedOutputStream:缓冲输出流,它是FilterInputStream的子类
6)、DataOutputStream:面向基本数据类型的输出流
134、字符输入流的根类是Reader
1)、FileReader:文件输入流
2)、CharArrayReader:面向字符数组的输入流
3)、PipedReader:管道输入流,用于两个线程之间的数据传递
4)、FilterReader:过滤输入流,它是一个装饰器,用来扩展其他输入流
5)、BufferedReader:缓冲区输入流,它也是一个装饰器,但不是FilterReader的子类
6)、InputStreamReader:把字节流转换为字符流,它也是一个装饰器,是 FileReader 的父类
135、字符输出流的根类是Writer
1)、FileWriter:文件输出流
2)、CharArrayWriter:面向字符数组的输出流
3)、PipedWriter:管道输出流,用于两个线程之间的数据传递
4)、FilterWriter:过滤输出流,它是一个装饰器,用来扩展其他输出流
5)、BufferedWriter:缓冲区输出流,它是一个装饰器,但不是FilterWriter的子类
6)、OutputStreamWriter:把字节流转换为字符流,它是一个装饰器,是FileWriter的父类
136、返回字节缓冲区输入流:fun InputStream.buffered(bufferSize:Int = Default_Buffer_Size):BufferedInputStream
137、返回字符缓冲区输入流:fun InputStream.bufferedReader(charset:Charset=Charsets.UTF_8):BufferedReader
138、从输入流中复制数据到输出流,返回复制的字节数:fun InputStream.copyTo(out:OutputStream,bufferSize:Int=Default_Buffer_Size):Long
139、将字节输入流转换为字符输入流:fun InputStream.reader(charset:Charset = Charsets.UTF_8):InputStreamReader
140、返回缓冲区输出流:fun OutputStream.buffered(bufferSize:Int=Default_Buffer_Size):BufferedOutputStream
141、返回字符缓冲区输出流:fun OutputStream.bufferedWriter(charset:Charset=Charsets.UTF_8):BufferedWriter
142、将字节输出流转换为字符输出流:fun OutputStreamWriter(charset:Charset = Charsets.UTF_8):OutputStreamWriter
143、getInputStream()函数:通过Socket返回输入流对象。
144、getOutputStream()函数:通过次Socket返回输出流对象。
145、port:Int属性:返回Socket连接到的远程端口。
155、localPort:Int属性:返回Socket绑定到本地端口。
156、inetAddress属性:返回Socket连接地址。
157、localAddress属性:返回Socket绑定到本地地址。
158、inClosed属性:判断返回Socket是否处于关闭状态。
159、isConnected属性:判断返回Socket是否处于连接状态。
160、close()函数:关闭Socket
161、getInputStream()函数:通过此Socket返回输入流对象。
162、getOutputStream()函数:通过此Socket返回输出流对象。
163、isClosed属性:判断返回Socket是否处于关闭状态。
164、isConnected属性:判断返回Socket是否处于连接状态。
165、accept()函数:侦听并接收到Socket的连接。
166、HTTP/1.1协议共定义了8种请求函数:OPTIONS、HEAD、GET、POST、DELETE、TRACE、CONNECT,在HTTP访问中,一般使用GET和POST函数
167、【反射机制】
168、kotlin元注解有4个,其中包含:@Target、@Retention、@Repeatable、@MustBeDocumented
169、Kotlin—lazy操作(其实也是属于代理的一种模式):https://www.jianshu.com/p/6dbd38f27033
170、Kotlin lateinit和by lazy的区别:
1、lazy{}只能用在val类型,lateinit只能用在var类型:val name: String by lazy { “sherlbon” };lateinit var adapter: MyAdapter
2、lateinit不能用在可空的属性上和java的基本类型:lateinit var age:Int //会报错
3、lateinit可以在任何位置初始化并且可以初始化多次,而lazy在第一次被调用时就被初始化,想要被改变只能重新定义
171、Lazy函数第一次调用会执行Lambda表达式,以后调用该属性会返回之前的结果。(返回)如:
val str:String by lazy{println(“aaron”) println(“cafei”)“tony”} fun main(){println(str) println(str)}
结果为:aaron cafei tony tony
172、kotlin的延迟属性:lazy,第一次调用输出,第二次调用不执行。
173、可观察属性Observable:
1)、Delegates.observable()函数接受两个参数:第一个是初始化值,第二个是属性值变化事件的响应器。
2)、在属性赋值后执行事件的响应器(handler),它有三个参数:被赋值的属性、旧值和新值。
174、by Delegates.notNull():如果属性在赋值前就被访问的话则会抛出异常。
175、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值