极简Kotlin入门笔记1

原创 2018年04月15日 15:27:01

最近在学kotlin,看了一些入门资料,整理为以下笔记(极简的形式记录的),便于自己复习,也希望对其他人有帮助。


kotlin是什么:

首先可以看下维基百科总体了解:Kotlin

以下关于Kotlin介绍章节摘抄于:写给Android开发者的Kotlin入门

Kotlin也是基于JVM设计的编程语言,算是对Java的温和改良。Google在2017年的IO大会上宣布,将Android开发的官方语言更换为Kotlin。比起Java来说,从编程思想到代码细节都有不少变化。

相对Java来说,Kotlin在编写代码时有如下优势:代码简洁高效、函数式编程、空指针安全、支持lambda表达式、流式API等。

执行效率上,Kotlin和Java具有同样的理论速度(都是编译成JVM字节码)。

Kotlin和Java是互相完美兼容的,两种代码文件可以并存代码可以互相调用文件可以互相转换,库文件也可以无障碍地互相调用,据说使用Kotlin基本不会带来额外的成本负担。


一:kotlin基础:

1.Hello World:

kotlin的源文件不需要和Java一样必须有一个同名Public class,所以Hello World代码如下:

package net.println.kotlin

fun main(args: Array<String>) {
    println("Hello World")
}


二.基本数据类型

kotlin变量的声明无须像Java一样显式指明类型,它可以自动推断出具体的类型。

以下是基本类型的声明赋值例子:

1.数字

kotlin并没有显示的包装类型的概念,比如Int可以看做Java中int和Integer的合体,kotlin会根据场景自动判断是该用基本类型还是装箱类型。

//int32位
val anInt: Int = 8
val anotherInt: Int = 0xFF
val moreInt: Int = 0b00000011
val maxInt: Int = Int.MAX_VALUE
val minInt: Int = Int.MIN_VALUE
//long 64位
val aLong: Long = 12368172397127391
val another: Long = 123
val maxLong: Long = Long.MAX_VALUE
val minLong: Long = Long.MIN_VALUE
//float 32位
val aFloat: Float = 2.0F
val anotherFloat: Float = 1E3f
val maxFloat: Float = Float.MAX_VALUE
val minFloat: Float = -Float.MAX_VALUE
//Double 64位
val aDouble: Double = 3.0
val anotherDouble: Double = 3.1415926
val maxDouble: Double= Double.MAX_VALUE
val minDouble: Double= -Double.MAX_VALUE
//Short 16位
val aShort: Short = 127
val maxShort: Short = Short.MAX_VALUE
val minShort: Short = Short.MIN_VALUE
//Byte 8位
val maxByte: Byte = Byte.MAX_VALUE
val minByte: Byte = Byte.MIN_VALUE

2.字符

占2个字节,表示一个16位的Unicode字符,使用单引号引用:

val aChar: Char = '0'
val bChar: Char = '中'
val cChar: Char = '\u000f'


3.布尔

val aBoolean: Boolean = true
val anotherBoolean: Boolean = false


4.字符串

字符串用 String 类型表示。字符串是不可变的。

字符串声明:

val string: String = "HelloWorld"

特殊字符的转义:

//打印出“Hello "Trump"”
    val sayHello : String = "Hello \"Trump\""
    println(sayHello)
    //salary
    val salary: Int = 1000
    //打印出“$salary”
    println("\$salary")

字符串模板:

    val arg1: Int = 0
    val arg2: Int = 1
    println("" + arg1 + " + " + arg2 + " = " + (arg1 + arg2))
//字符串模板,表示使用“{}”括起来
 println("$arg1 + $arg2 = ${arg1 + arg2}")

5.数组:

//无装箱开销的专门的类来表示原生类型数组
val arrayOfInt: IntArray = intArrayOf(1,3,5,7)    
val arrayOfChar: CharArray = charArrayOf('H', 'e','l','l','o','W','o','r','l','d')
val arrayOfString: Array<String> = arrayOf("我", "是", "码农")


三.类与对象

1.类的定义初始化:

//定义Girl、Boy类继承Human
class Girl(charater: String, appearance: String, voice: String): Human(charater, appearance, voice)
class Boy(charater: String, appearance: String, voice: String): Human(charater, appearance, voice)
//只有open修饰的类才可以被继承
open class Human(var charater: String, var appearance: String, var voice: String){
    //初始化代码块
    init {
        println("new 了一个${this.javaClass.simpleName}, ta性格:$charater, 长相:$appearance, 声音:$voice")
    }
}

fun main(args: Array<String>) {
    val myGirl: Girl = Girl("温柔", "甜美", "动人")
    val myBoy: Boy = Boy("彪悍", "帅气", "浑厚")
    println(myGirl is Human)
}
次构造函数:
class Person(val name: String) {
    constructor(name: String, parent: Person) : this(name) {
        parent.children.add(this)
    }
}

2.类型转换:

假如有两个类,Child继承Parent:

open class Parent

class Child: Parent() {
    fun getName(){
        
    }
}

安全的类型转换

fun main(args: Array<String>) {
    val parent: Parent = Parent()
	//当parent不为Child类型或子类的时候不抛异常,而是返回null
    val child: Child? = parent as? Child
    println(child)
 
}

智能的类型转换:

var parent:Parent = Child()
    if (parent is Child){
        //编译器知道parent是Child的实例了,无须像Java一样再做一次转换
        print(parent.getName())
    }

3.空安全:

fun getName(): String?{
    return null
}

fun main(args: Array<String>) {
	//如果getName返回空则return,非空则将返回值赋值给name
    val name: String = getName() ?: return
    println(name.length)

    val value: String? = "HelloWorld"
	//告诉编译器value绝对为非空
    println(value!!.length)
	//value非空才可以调用length,否则value?.length返回null
	print(value?.length)
}




版权声明:本文为博主原创文章,转载请注明 http://blog.csdn.net/sinat_23092639 https://blog.csdn.net/sinat_23092639/article/details/79948256
收藏助手
不良信息举报
您举报文章:极简Kotlin入门笔记1
举报原因:
原因补充:

(最多只允许输入30个字)