从java到Kotlin学习一:初了解kotlin

函数(表达式函数体)

java 写法:

 public Int methodName(int a){//TODO}

kotlin 写法:

fun methodName(a:Int):Int{if(a>b)return a else return b }    

特性: 可以使用表达函数体同时省略返回类型(当函数体只有一个表达式组成的时候)--as 可以自己转换

 fun methodName(a:Int)=if (a>b) a else b

变量

java  写法:

int a =0; 使用确定类型

kotlin 写法:

val  只能赋值不能改变值 --不可变引用   对应java finial

var 可以赋值也可以改变值 --可变引用 

var a=0; 可以使用不明确类型 能够根据值 确定类型 赋值之后 类型就确定了  再改变类型 a="a" 报错

字符串模板

java  写法:

Log.d(TAG,"a="+a);

kotlin 写法:

${} 括号里面不仅可以放变量 表达式 还可以放双引号引用文字

 Log.d(TAG,"a=${if(a>0) a else "anything"}")

类和属性

java  写法:

public class Person{  String name; int age;}

kotlin 写法:

kotlin 中省略publish 因为 默认就是public 

class Person { val  name:String  var age:Int}  

只读字段name  会对应生成一个get方法   

可变字段age  会生成set和get 一对方法

简化引用  

val person=Person(“”小a“”,12)

 person.name 省略调用get方法的必要 直接调用变量

自定义访问器

class Retangle{

val  isSquare:Boolean 

      get(){      return width==heigh  }}

目录和包

java  写法:

 java结构中 每个文件 的包名是固定的  每个文件夹下的所有类  包名都是相同的 (同一个包下)

kotlin 写法:

包名可以自己定义  不同包名的文件 可以放在同一个包下 (为了结构清晰 本人不太推荐使用这种分包方式)

枚举 和 when

java  写法:

枚举 enum Color{RED,YELLOW,GREEN,GRY}

选择器 switch(i){case ...}

kotlin 写法:

改变了枚举类型写法   对于enum这个关键字  kotlin 规定 不写在class前面 没有意义 只是普通名称 

和java类相同 enum 并不是值得列表 同时可以添加属性和方法 

enum class Color(val r: Int;val g:Int;val b:Int){

           RED(255,0,0),YELLOW(255,255,0);

fun rgb()={(r*256+g)*256+b}

}

大概了解的人 都知道 kotlin 已经省略了;  但在枚举中 属性和方法之间必须有;

kotlin 中使用when 代替switch选择器 

when(color){

Color.RED->{ //TODO}

Color.YELLOW,

COLOR.GREEN ->{//TODO}//多种情况使用,分割

...

else//使用else 代替default

...

}

对于when 不仅能够使用switch 所能使用的 同样 可以使用表达式 以及空参 

when(set(c1,c2)){

set(Color.RED,Color.YELLOW)->{//TODO }

}

使用这种表达式 效率可能会有点低  我们转化下

when{

 (c1==Color.RED&&c2==Color.YELLOW)->{//TODO}

}

这种无参写法 可以省略创建对象  但是很难理解 

for新特性(in 的用法)

java  写法:

很简单不在写了 

kotlin 写法:

常见的 1-100输出 使用了区间 1..100 是不是很简单  

for (i in 1..100){//TODO }

可以设置 倒叙 

for (i in 100 dowmTo 1 step 2){// 设置倒叙 步长为2 }

in不仅可以可以检查数字类型的区间  还可以 检查字符 

for(a in 'A'..'Z')  

when(char){

in 0..9->{}

in 'a'..'z'->{}

}

不仅有in  还有 !in    这个不再介绍

map新特性

java  写法:

赋值 map.put(key,value)

迭代 很简单不写了==

kotlin 写法:

map新特性

赋值 map[key]=value

迭代

for((key,value) in map){//TODO  }

异常处理

java  写法:

try{ return num;}cache(Exception e){}

throw new  Exception("msg")

int persentNum=0;

if(num>0&&num<100){

persentNum=num;

}else{

throw new  Exception("num must between 0 and 100")

}

kotlin 写法:

与实例创建一样 省略new 

throw   Exception("msg")

特性一:

上面我们提过表达式函数体这个概念 那么 上面的 if else 就可以改写成表达式函数体 

val persentNum=try{num}catch(e:Exception){}

val persentNum= if(num in 0..100) num else throw Exception("num must between 0 and 100")

特性二:

取消了受检异常和非受检异常区分

在java中 我们使用读写 比如 BufferReader reader   reader.readLine()方法的时候as直接出现提示 必须 处理 或者抛出异常 

这是因为 IOException在java中属于受检异常(在java.lang库内部定义。Java编译器要求程序必须捕获或声明抛出这种异常--checkException)对于受检异常 必须显示抛出 。

kotlin像许多语言 一样取消了受检异常 和非受检异常的区分 也就是 我们只在必要的时候 处理异常 不会再有强制性必须处理的异常了





猜你喜欢

转载自blog.csdn.net/youth_never_go_away/article/details/79644098