一起从零学Kotlin-20170728

学习本文章的同学,你一定得熟悉Java方面的知识,否则本文章不是太适合你哦!

一起从零学Kotlin-20170728

0.官方API

链接:http://pan.baidu.com/s/1geVxlJ1 密码:4nht
官方API才是学习的王道……

Intellij IDEA(kotlin开发学习IDEA,并且还支持Java)下载
https://www.jetbrains.com/idea/

官网下载慢的可以从我云盘里面下载:
链接:http://pan.baidu.com/s/1i4Au2nb 密码:qato

1.HelloWorld

fun main(args: Array<String>) {//相当于Java的main()函数

      println("Hello Kotlin!")

}

2.Kotlin当中的基本数据类型(与Java有些不同)

Kotlin当中的基本数据类型基本上和Java差不多,但是不存在装箱和拆箱的概念,还有就是声明那可真不太一样:

变量的声明涉及到两个关键字:

Kotlin中有两个关键字定义变量,这两个关键字外形看着差别很小就只差了一个字母,但实际差别很大的。

var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和Java中声明变量的方式一样。

val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。

注意的是Kotlin当中并不存在int和Integer等类似的基础类型对应的关键字,而只存在Int,Byte,Boolean等等基础类型关键字,所以根本不存在拆箱和装箱。有同学以为我值域是不是忘记填啦,我当然不是忘记啦!这要靠你们自己来完成填写,Kotlin当中获取基础类型的最大值和最小值非常简单,比如,我拿Int类型为例:

var maxInt:Int = Int.MAX_VALUE
println("Int类型的最大值是:"+maxInt)

var minInt:Int = Int.MIN_VALUE
println("Int类型的最小值是:"+minInt)

3.Java支持自动类型转换,Kotlin可不支持

Java当中char–>int–>long,int—>float等等都可以自动转换,Kotlin可不支持,为啥呢?降低不必要的错误

4.Java当中的原始祖类是Object,而Kotlin却是Any

Kotlin当中Any的源码如下:

这个Java当中的Object比较有着很大的不一样,Any只存在着三个方法:
equals(),hashCode,toString,要想知道为什么,就坚持学到后面,答案会揭晓的。

5.Kotlin如何处理空指针?

在学习这个问题之前,我们回想一下我们在敲写Java代码的时候如何处理java当中的空指针呢?比如:我们在设计Android新闻客户端就经常需要处理的问题:

public static String  getNetJson(){

    String strJson = "";//存储网络请求的Json格式的数据

    //当从服务器请求到数据
    //return json

    //当服务器端异常的时候
    return null;
}


public static void main(String[] args){


    //解析Json格式数据

    String strJson = getNetJson();
    if(strJson != null){

       //解析数据并且将把数据显示到控件上

    }else{

        //提示用户,服务器异常,数据请求失败

    }
}

上述代码只是模拟,不是真实的功能代码,你可以看出,Java处理空指针真是繁琐麻烦,那么Kotlin如何处理呢?其实Kotlin已经将空类型进行隔离处理了,什么是隔离处理呢?
Kotlin当中所有的类型都分为“可空类型”和“非空类型”,比如:”String”和”String?”,String就是非空类型,String?就是可空类型,非空类型是不允许被null赋值的,否则,代码会编译报错,而可空类型就是可以允许被null赋值,比如以下方法是会报错的:

fun getNetJson():String{

     return null;//String是非空类型的,所以编译不能通过

}

那么如何处理null类型呢?

 println(getNetJson()?.length)//当getNetJsonwei为null时输出null,不为空时输出getNetJson()的长度   
 getNetJson?.return//当getNetJsonwei为null时返回

还有一种情况,当你使用的是可空类型,比如一下代码:

 var str:String? = "dsada"
 println(str.length)//编译器报错,因为str可能为null,为null的时候是不能调用length的

有时候我们特别肯定尽管我的变量是声明的可空类型,但是肯定不会出现null的情况,那么你可以这么写,从而告诉编译器,放心编译把,肯定没null值的:

var str:String? = "dsada"
println(str!!.length)

这么一比较,是不是觉得Kotlin处理null指针太人性化了啊。

6.KotLin中的类型转换

Java当中的类型转换是指存在继承关系的,子类可以向上自动转型为父类,而父类转子类则需要强制转换。而Kotlin中的类型转换是使用as关键字

fun main(args: Array<String>) {


   var  p:Person? = Student("ellen",23)

   var  s:Student? = p as Student//把Person类型的p转换为Student类型

   println(s?.name+":"+s?.age)


}

class Student(name: String, age: Int) : Person(name, age) 

open class Person{

     public var name:String = ""
     public var age:Int = 0

     constructor(name:String,age:Int){

        this.age = age
        this.name =name

     } 

 }

7.Kotlin中的外号是咋回事儿?

当你的村子里出了一个3胞胎,长的一摸一样,那么如何区分他们呢?如同Java当中在一个类中同时使用了多次名字相同但是包名路径不一样的类,Java当中是这么处理的,就是带上包路径来区分,这样真是太繁琐麻烦了,每次使用都还要加上包路径,简直都不能好好敲代码了,Kotlin就不存在这种麻烦,Kotlin处理这种情况的方法叫别名机制,就是“取个外号”,用外号来区分它们。比如下面的代码:

A包的Student

package A

open class Student{


    init {
        println("俺是A包中的Student")
    }

}

B包的Student

package B

open class Student{


    init {
        println("俺是B包中的Student")
    }

}

C包的Student

package C

import A.Student as AS//将A包下的Student类取外号为"AS"
import B.Studnet as BS//将B包下的Student类取外号为"BS"

open class Student{

     init {
       println("我是C包中的Student")
     }

}

fun main(args: Array<String>) {

   var astudent:AS = AS()//通过外号来创建实例对象

   var bstudent:BS = BS()//通过外号来创建实例对象

   var cstudent:Student = Student()

}

输出:
俺是A包中的Student
额是B包中的Student
我是C包中的Student

8.Kotlin的“区间”

Java当中并没有区间的类,这是Kotlin独特具有,类名叫Range

整型区间:

var intRange:IntRange = 0..1024//区间为[0,1024],注意是全闭的
var intRange2:IntRange = 0 until 1024//区间为[0,1024),注意是半闭半开的,包头不包尾

println("50是否存在与区间[0,1024]:"+intRange.contains(50))
println("-3是否存在与区间[0,1024):"+intRange.contains(-3))

//遍历区间
for(i in intRange){
    println(i)
}

9.Kotlin的数组

class Teacher(var name:String,var age:Int){}

fun main(args: Array<String>) {

    var intArray:IntArray = intArrayOf(2,3,4,5)//Int数组

    var teacherArray:Array<Teacher> = arrayOf(
                              Teacher("庞统",53),
                              Teacher("刘备",44),
                              Teacher("关羽",43),
                              Teacher("张飞",42))//Teacher数组

    //数组的修改
    teacherArray[0] = Teacher("诸葛亮",40)

    //数组的遍历
    for(i in intArray){
         println(i)
    }

    for(teacher in teacherArray){
         println(teacher.name+":"+teacher.age)
    }
}

输出:
2
3
4
5
诸葛亮:40
刘备:44
关羽:43
张飞:42

10.kotlin中的 “==” 与 “===”

在kotlin中”==”就是equals()的功能,比较的内容,而“===”判断的是两个的引用值,也就是判断这两个引用是否指向同一个对象,代码演示:

var intRange1:IntRange = 0..1024
var intRange2:IntRange = 0..1024

println(intRange1 == intRange2)

println(intRange1 === intRange2)

输出:
true
false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值