本篇文章我们简单说下kotlin的基本语法,相信熟悉java语言的同学,看完之后,会更容易学习kotlin。下一篇,我会根据安卓开发中的语法,进行kotlin讲解。这片我会通过kotlin语法和Java对比的方式,达到更容易理解的效果。本篇大部分代码示例是从kotlin官方文档上摘录下来。
android studio想要支持kotlin特别简单:
首先添加插件File->Setting->Plugins->搜索Kotlin->install
最后Restart AS。
这里就不多说了。下面让我们开始学习kotlin的语法。到最后我会运用到安卓中,从安卓开发的角度使用起来。
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 x = 2
var str = “var”
x +=2
str =” change var”
和java代码对比一下:
String str =”str”;
str = “str1”;
int a=1;
a =2;
这里我说一下,在我开发过程中发现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:公共,所有都可见 (默认)
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){
}
}
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。
//如果str不是数字内容,返回null
fun parseInt(str:String):Int?{
return str.toIntOrNull
}
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();
}
}
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(index<items.size){
println("item at $index is ${items[index]}")
}
和Java的使用方法基本类似
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;
}
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){}
这篇就先写到这,下篇主要是关于集合,类的重载、继承等内容。