一周入门Kotlin(一)
2017-05-30 06:41
253 查看
Kotlin是最近IO大会推荐的一级语言,也是我们学习的主流方向,其语法实际上不难,融合了很多优秀语言的特性,如面向过程C语言思想。OC语言的代理和类扩展思想。lambda表达式的精简等等。接下来你会想如何学习这个东西又不浪费时间呢。本教程以Java语言的思维进行转换学习,一周带你入门Kotlin。
Studio预览版。如果在2.3的工具中使用如下教程。
Kotlin的技术地址做了大量的介绍,你可以在官网查看技术的实现.
创建新的应用成功
找到android studio 的action工具
将java工程自动转换成kotlin工程
转换后的结果如下
2.现在我们创建一个Person类,代码如下
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
Student类的创建如下,如果你创建了Person类,系统会为你默认创建一个空参构造器:
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
那么问题来了,如果你想在一个类中创建多个次构造器,可以这么写:
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
2
3
1
2
3
创建的代码可以如下,var代表声明一个变量:
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
安卓大部分setter/getter方法都可以
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
对,operator操作符就是扩展方法的操作符,该句代码放在某个文件中即可。这里我们扩展的ViewGroup类,为他添加一个get方法。
Android Extensions是有Kotlin官方提供的一个可以帮助我们在代码区获取控件并处理的工具,其网址:Kotlin Android Extensions
在build.gradle 文件的最上面添加:
1
在代码类中添加
1
如果在布局中有个控件
2
3
4
5
1
2
3
4
5
在onCreate()方法中,可以这样调用:
1
搭建环境
这里我使用的是mac环境,但是我想应该没多大问题,首先该语言是Android studio3.0全面支持的,其下载地址是AndroidStudio预览版。如果在2.3的工具中使用如下教程。
Kotlin的技术地址做了大量的介绍,你可以在官网查看技术的实现.
创建新的应用成功
找到android studio 的action工具
将java工程自动转换成kotlin工程
转换后的结果如下
类的使用
声明一个简单类
1.创建kotlin文件,如果创建 你会发现该文件的后缀是kt2.现在我们创建一个Person类,代码如下
class Person { //1.声明了2个变量 他们的类型分别是String和Kootlin中的Int //2.在Kotlin中,基本类型已经不能使用 只能使用kotlin支持的Int Double Long 等 //3.var和val都代表声明一个对象 val声明的对象是无法重新赋值 //4.声明的属性必须默认先赋一个默认的值 //5.内部自动为属性创建setter+getter方法 val name: String ="" var age: Int =0 }1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
创建一个子类
现在,我们接着创建一个学生类 该类是Person的子类。这里有一点要主要的,默认如果一个类被别的类继承,那么他必须添加open关键字open class Person { //声明了2个变量 他们的类型分别是String和Kootlin中的Int var name: String ="" var age: Int =0 }1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
Student类的创建如下,如果你创建了Person类,系统会为你默认创建一个空参构造器:
// 这里可以看出Student类继承Person并继承Person的无参构造器 class Student : Person() { // 默认每个学生都有3个课程 var< 12881 /span> courses :Int =3 // 默认每个学生身高1.70米 var height: Double =1.70 }1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
构造器创建
在Kotlin中,构造器分为2种,一种是主构造器,一种是次构造器。主构造器是在类创建的时候顺便指定的,比如我们想在Student类创建的时候指定名称和课程数,那么类的创建如下://1.在构造器创建的参数也会让该类内部自动为属性创建setter+getter方法 //2.因为name在父类已经声明过了 这里不需要var关键字 class Student(name: String ,var courses :Int =3) : Person() { // 默认每个学生身高1.70米 var height: Double =1.70 }1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
那么问题来了,如果你想在一个类中创建多个次构造器,可以这么写:
class Student(name: String ,var courses :Int =3) : Person() { // 默认每个学生身高1.70米 var height: Double =1.70 //1.这里的构造必须使用constructor关键字 必须重写主构造器 //2.主构造器我们不传递courses就使用默认的3 //3.次构造器默认不创建setter+getter方法,也不能有val/var关键字,它不会在该类中创建属性 //4.如果该构造器不用赋值 你完全可以去掉方法体的{ } constructor(nameValue:String,ageValue:String):this(nameValue) }1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
方法的创建
学生应该有学习行为,这里没有方法的说法 我们称为函数。所以我们可以为学生创建一系列的方法:class Student(name: String, var courses: Int = 3) : Person() { var height: Double = 1.70 //1.fun代表创建一个study函数 传入课程名courseName 返回成绩 类型为Int //2.每个语句都没有;作为结尾 这是他的特点 fun study(courseName: String): Int { if (courseName.equals("语文")){ return 99 } return 80 } //如果一个方法返回一个数据并只用了一行代码 那么可使用如下写法 fun printf():String = "$name 的身高是 $height" //如果一个方法不返回数据 可以用Unit代替 你可以认为是void 当然:Unit也可以不写 fun play():Unit{ Log.i("IT520","$name 正在玩!") } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
setter/getter方法
默认情况下属性会自动生成setter/getter方法 这类似于OC的做法。但是我们也可以重写这两个方法,只需要在属性后面声明即可,而field指向的就是该属性,因为kotlin不运行直接方法该对象。class Student(name: String, var courses: Int = 3) : Person() { var height: Double = 1.70 get() = field set(value) { field =value +0.01 } }1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
类静态变量
一般在java语言中如果使用静态变量,必须使用static关键字,如果想初始化静态代码块,可以使用static{ }.kotlin提供了类型的功能,比如我们想在Student中创建3个课程的常量,可以这么写:class Student(name: String, var courses: Int = 3) : Person() { //该模块下的代码在大部分其他类中都可以调用 companion object{ public val MATH : Int =1 public val CHINESE : Int =2 public val ENGLISH : Int =3 } }1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
对象的使用
对象的创建
还记得上面我们创建的构造器吗?class Student(name: String, var courses: Int = 3) : Person() { ... }1
2
3
1
2
3
创建的代码可以如下,var代表声明一个变量:
//1.创建对象没有了new关键字 //2.构造器第二个参数就算不传递 也可以使用默认的 //3.每句代码都没有; var s1=Student("lean") var s2=Student("zhangsan",5) //4.如果一个对象不想马上创建 可以引向null 但是声明必须加? 表示该对象可以为null var s3: Student? = null //5.如下添加了?表示 如果s3对象为null 则不调用 s3?.printf()1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
调用setter/getter方法
安卓大部分setter/getter方法都可以class Student(name: String, var courses: Int = 3) : Person() { var height: Double = 1.70 get() = field set(value) { field =value +0.01 } } //调用内部的setter s2.height=1.75 //调用getter val height: Double=s2.height //打印某个变量 Log.i("IT520","$height")1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
扩展类的功能
有时候 你使用的第三方库 或者官方的代码用的不爽 如果是java语言的话你可以使用包装类来添加功能,但是kotlin还提供了类似OC的一个功能如下:operator fun ViewGroup.get(index: Int): View = getChildAt(index)
对,operator操作符就是扩展方法的操作符,该句代码放在某个文件中即可。这里我们扩展的ViewGroup类,为他添加一个get方法。
Kotlin Android Extensions
Android Extensions是有Kotlin官方提供的一个可以帮助我们在代码区获取控件并处理的工具,其网址:Kotlin Android Extensions在build.gradle 文件的最上面添加:
apply plugin: 'kotlin-android-extensions'1
1
在代码类中添加
import kotlinx.android.synthetic.main.布局名.*1
1
如果在布局中有个控件
<TextView android:id="@+id/hello" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, MyActivity" />1
2
3
4
5
1
2
3
4
5
在onCreate()方法中,可以这样调用:
hello.setText("Hi!")1
1
相关文章推荐
- 一周入门Kotlin(二)
- 一周入门Kotlin(四)
- 一周入门Kotlin(一)
- 一周入门Kotlin(三)
- 一周入门Kotlin(五)
- Kotlin入门(10)七十二变的输入参数
- KOTLIN开发语言文档(官方文档) -- 入门
- 【kotlin从入门到深坑】系列目录
- 【kotlin从入门到深坑】之语句
- Kotlin入门(22)适配器的简单优化
- HelloKotlin(kotlin配置环境变量,kotlin hello world,kotlin 入门)
- Kotlin Android学习入门
- Kotlin入门篇(二),如何声明函数和处理空值
- Kotlin入门(14)继承的那些事儿
- Kotlin学习笔记1-2 入门-常用写法
- ASP/PHP一周快速入门建议
- kotlin-30分钟快速入门
- Kotlin入门教程之开发环境搭建
- android——kotlin开发入门之开发环境搭建
- kotlin开发Android入门篇一