kotlin开发安卓,看这篇真够了(一)

本篇文章我们简单说下kotlin的基本语法,相信熟悉java语言的同学,看完之后,会更容易学习kotlin。下一篇,我会根据安卓开发中的语法,进行kotlin讲解。这片我会通过kotlin语法和Java对比的方式,达到更容易理解的效果。本篇大部分代码示例是从kotlin官方文档上摘录下来。

android studio想要支持kotlin特别简单:
首先添加插件File->Setting->Plugins->搜索Kotlin->install
最后Restart AS。
这里就不多说了。下面让我们开始学习kotlin的语法。到最后我会运用到安卓中,从安卓开发的角度使用起来。

定义常量 - - -val

val str = “final” //会自动检测为String类型
val str :String =”final”;
val b = 2
val c:Int = 2
val d:Int //常量没有初始值必须声明类型
d=1

这里我们和java代码对比一下,更清晰:

//相当于java的
final String STR =”final”;
final int COUNT = 1;

定义变量 - - -var

var x = 2
var str = “var”
x +=2
str =” change var”

和java代码对比一下:

String str =”str”;
str = “str1”;
int a=1;
a =2;

静态变量 - - - companion

这里我说一下,在我开发过程中发现kotlin不能在内部类里添加静态变量

//静态常量
companion object {
val s = “string”
val a =1
}
//静态变量
companion object{
var s=”string”
var a =2
}

java:

//静态常量
final static String S =”fianl static”;
final static String A = 1;
//静态变量
static String S=”static”;
static String A =”static”;

函数

kotlin的程序入口:

//main方法执行
fun main(args:Array){
print(“sum of 3 and 5 is “)
println(sum(3,5))
}

java程序入口:

public static void main(Array args){

}

带有两个Int 参数,返回Int 的函数:

fun sum(a:Int,b:Int) :Int{
return a +b
}
//也可以写成表达式方式
fun sum(a:Int,b:Int) =a + b
//无返回值:
fun printSum(a:Int,b:Int):Unit{

}
//Unit可以省略:
fun printSum(a:Int,b:Int){

}

Java对比:

//int返回值
public int sum(int a,int b){
….
}
//无返回值
public void execute(int a,int b){
}

修饰符

在Kotlin中有以下四个可见性修饰符
- private:同一类或文件(针对包级别定义)中可见
- protected:同private 加子类可见
- internal:在同一个模块中可见(如果声明范围的所有者是可见的)
- public:公共,所有都可见 (默认)

构造 - - -constructor

kotlin和Java一样,属于单继承,多实现。也就是最多继承一个类,可以实现多个接口。

//如果有一个构造函数,后面 会详细讲解重载,继承
class Child(private val str:String)
//
class Child { constructor(a:Int,b:Int){ }
    constructor(a:Int,b:Int,c:Int){ } }

让我们看看熟悉的Java构造:

public class Child {
    private String mStr;
    public Child( String str){
        this.mStr=str;
    }  
    public Child(String str,int a){

    }
}

条件表达式 - - - if

fun maxOf(a:Int ,b:Int):Int{
    if(a>b) return a
    else return b
} //或
fun maxOf(a:Int,b:Int) = if(a>b) a else b

条件语句和java基本大致相同:

public int maxOf(int a,int b){
    if(a>b) return a;
    else return b;
}

使用可空值检测及null检测

当某个变量的值为null的时候,必须在声明处的类型后添加?来标识该引用可为null。

//如果str不是数字内容,返回null
fun parseInt(str:String):Int?{
    return str.toIntOrNull
}

使用类型检测及类型转换 - - - is

is 是判断是否为某类型的一个实例。如果已经呗判断出来,可以直接当作该类型使用,无需显式转换,具体我们看看下面代码讲解:

fun getStringLength(obj:Any):Int?{
    if(obj is String){
        //现在已经判断出来obj为String类型
        //我们可以直接调用String类型的属性和方法
        return obj.length
    }
}

Java中还是需要转换的:

public int getStringLength(Object obj){
     if (obj instanceof String){
            ((String) obj).length();
      }
}

使用 for 循环

var items =listOf("apple","banana","kiwi")
for(item in items){
    println(item)
} //或者
for(index in items.indices){
    //可以通过$符号显示
    println("item at $index is ${items[index]}")
}

相当于Java中使用for和foreach:

ArrayList<String> listStr=new ArrayList<String>();
listStr.add("apple");
listStr.add("banana");
listStr.add("kiwi");
for (int i = 0; i < listStr.size(); i++) {
    Log.e("TAG",listStr.get(i));
}
for (String str:listStr) {
    Log.e("TAG",str);
}

使用while循环

while(index<items.size){
    println("item at $index is ${items[index]}")
}

和Java的使用方法基本类似

使用when表达式

when的使用,相比Java就要强大的多了,它可以支持多种类型,而Java只支持整型。让我们看看when

fun describe(obj:Any):String =
    when(obj){
        1 -> "One"
        "Hello" -> "Greenting"
        is Long -> "Long"
        !is String -> "Not a string"
        else ->"Unknown"
    }

kotlin的when语法,和Java的switch比较相似:

swith(v.getId()){
    case R.id.tv:

    break;
    case 2:

    break;
    defalut:

    break;
}

使用区间 - - - range

if(x in 1..10){}
if(-1 !in 1..100){}
for(x in 1..5){ print(x) }
for(x in 1..10 step 2){ print(x) }

java写法就比较笨重了:

if(x>1 && x<10){}
for(int i =1;i<10;i+=2){}

这篇就先写到这,下篇主要是关于集合,类的重载、继承等内容。

你可能感兴趣的:(android)