用Java开发了不少年,由于工做的须要学习Kotlin。初识Kotlin时是各类不习惯,以为这个语言相对于Java而言并不够严谨。随着不断的深刻,最终仍是逃不过"真香定理"。我一直认为普通的技术使用者是没有太多的权利去评论一门技术语言的好坏。不少人只了解皮毛就开始对它进行过度的评论。因此你们不要被网上的一些信息所左右(像我这样单纯的程序员好像很少了)。若是你有Java基础,上手Kotlin是很是的快,并且还会让你爱不释手。前端
国际惯例,咱们分别用Java和Kotlin实现打印hello world的功能。经过比较二者的区别,开启Kotlin大门。java
先是熟悉的Java代码:程序员
第一步:建立java文件,并定义一个HelloWorld类,编程
第二步:建立类的入口函数main方法,在main函数中执行输出语句。后端
package com.java.helloworld; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
接一下是陌生的Kotlin代码:安全
第一步:建立kt文件,编程语言
第二步:建立入口函数main方法,在main函数中执行输出语句。函数
package com.kotlin.helloworld fun main(args: Array<String>) { println("Hello World") }
看到这部分代码,你必定会奇怪学习
Kotlin不须要定义class类就能够执行main方法?是的,固然也能够作到先定义类,而后在类中建立main函数。code
Kotlin是经过fun关键字定义一个函数?
Kotlin的main函数为何没有public static void 等关键字?
Kotlin的变量名怎么在变量类型的前面?
Kotlin的输出语句看起来好简单!!!没错,这些都是Kotlin的语法特色。先混个脸熟!
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言。而且Google 已经宣布 Kotlin 成为 Android 官方开发语言。但这并不意味着Kotlin只能作Android开发。Java能作到的,Kotlin基本均可以作到。并且比Java更简单,更简洁,更实用。Kotlin还提供了大量的函数帮助咱们快速开发,同时也挖了不少坑等着咱们跳。
用Kotlin之后发现本身变笨了点!你们有没有这样的感受呢?
在Java中,声明一个变量,必需要先规定变量的类型,而后才是变量的名称。与之相反,Kotlin是先定义变量名称,最后才是变量类型。Kotlin甚至能够省略变量类型,经过编译器智能推断出变量的类型。这也是变量类型写在后面的好处。
仍是老规矩,咱们分别用Java和Kotlin变量定义。经过比较二者的区别,进一步了解Kotlin。
列举了一些Java常见的基本数据类型和用法,定义变量的格式:[修饰符] + 变量类型 + 变量名称
public class Variable { public static void main(String[] args) { byte b = 0; short s = 0; int i = 0; long l = 0L; float f = 0.0f; double d = 0.0; boolean bl = true; char c = 'c'; } }
习惯用Java的朋友在使用Kotlin中最大的不适应的地方就是变量。由于声明变量的代码是常有的,并且二者的语法格式偏偏相反。Kotlin经过关键字val和var定义变量,而后接变量名和变量类型。格式:val/var + 变量名 : 变量类型。
使用关键字val修饰变量表示该变量是不可变的,至关于用Java的final修饰。一旦初始化成功后则不能再从新赋值。Kotlin是默认推荐使用val。开发中常常用val引用变量,对象、集合等。
使用关键字var修饰变量表示该变量时可变的,经常使用于修饰基本变量,若在实体类中使用val修饰变量,前端传递数据,后端可能会一直获取不到值。就像GO语言,习惯使用Java和Kotlin语言的朋友,在初写Go语言代码时,是否被它的首字母大小写逻辑给雷到呢?
注意:val的不可变指的是自己,它指向的对象多是可变的。这里有一个小知识,Kotlin中的集合分只读和可读可写两种,是否是又不习惯了!
val map: MutableMap<String, String> = mutableMapOf("Key" to "ITDragon") map["Key"] = "ITDragonBlog" println(map) // {Key=ITDragonBlog} var i = 2 i ++ println(i) // 3
小技巧:初写Kotlin代码,var和val傻傻分不清楚。记住使用val可能出现值不修改的问题,可是都用var修饰变量,通常只会出现逼死强迫症的编译警告。
Kotlin的变量并不是基础数据类型,而是相似Java的包装数据类型。不一样的是:Java的包装数据类型的默认值是null。但这里的Kotlin变量都是不容许为null的。由于Kotlin是null 安全的语言。若但愿变量值能够为null,则须要在变量类型后面加上?。如Int?,Long?,Float?等等
fun main(args: Array<String>) { var b: Byte = 0 var s: Short = 0 var i: Int = 0 var l: Long = 0L var f: Float = 0.0f var d: Double = 0.0 var bl: Boolean = true var c: Char = 'c' }
相信你们都是有必定Java基础的朋友,这里只用输出语句打印变量的取值范围。${}
是Kotlin字符串拼接的语法,相比Java,更美观。
fun rangeValue() { println("Byte (${Byte.MIN_VALUE} ~ ${Byte.MAX_VALUE})") println("Short (${Short.MIN_VALUE} ~ ${Short.MAX_VALUE})") println("Int (${Int.MIN_VALUE} ~ ${Int.MAX_VALUE})") println("Long (${Long.MIN_VALUE} ~ ${Long.MAX_VALUE})") println("Float (${Float.MIN_VALUE} ~ ${Float.MAX_VALUE})") println("Double (${Double.MIN_VALUE} ~ ${Double.MAX_VALUE})") }
Java支持将范围小的变量隐示转换范围大的同类型变量,好比int类型转long类型,char类型转int类型等。可是Kotlin并不支持。好比Int类型变量和Char类型变量直接相加,编译器会报错。Kotlin必需要将Char变量经过执行.toInt()方法显示转换成Int类型。
Kotlin的变量还有一个特色,当声明变量后直接赋值,编译器会智能推断该变量的类型,此时变量类型能够省略。
开始以为不习惯,后来慢慢就习惯了,这可能大概就是佛系程序员的一个特色吧
fun variableConvert(char: Char) { var number: Int = 1 println("显示转换成Int类型: ${number + char.toInt()}") var num = 2 println("智能推断变量类型: ${num.javaClass}") }
到这里,初始Kotlin的内容就介绍了。Kotlin与Java的区别太多太多了。Kotlin的特色也是很是多。我会拆分红多个小章节。Kotlin好学,可是很差讲。