Kotlin入门学习

本文是Kotlin编程的入门教程,涵盖了Kotlin的基础知识,包括数据类型、类和对象、函数、面向对象特性以及高阶函数等内容。Kotlin是JetBrains推出的静态类型编程语言,支持JVM、Android和浏览器编程,于2016年2月发布1.0稳定版。文章详细讲解了Kotlin中的Number数据类型、字符串、类的构造函数、函数定义、Lamdba表达式、抽象类与接口、继承和数据类等核心概念。
摘要由CSDN通过智能技术生成

引言

简介

Kotlin是JetBrains推出项目,是一种在Java虚拟机上运行的静态类型编程语言,也可以被编译成为JavaScript源码。在2011年7月推出之前,它已被开发一年之久。直到2016年2月15日,官方发布了第一个稳定的release版本 Kotlin v1.0。
基于JVM编程,这意味着Kotlin可以写服务器代码;
基于Android和Browser编程,这意味着不仅可以写客户端编程,连前端开发都可以;
基于Native编程,直接绕过JVM与底层代码打交道。

发展历史

2010立项
2011.6对外公开
2012.2开源
2013.8支持Android Studio
2014.6 全新的开源web站点和域名 Kotlinlang.org
2016.2发布1.0
2016.9发布1.0.4,支持apt

数据类型

Boolean数据类型

Kotlin中的Bolean类型和Java中的一样,只有两个值true和false。
与Java一样可以使用&&、||、!进行与或非操作

eg:
//Boolean
var num: Boolean = true

Number数据类型

主要包括整型和浮点型 跟java一样

分类 类型 位宽
浮点型 Double 64
浮点型 Float 32
整型 Long 64
整型 Int 32
整型 Short 16
字节 Byte 8
eg:
//1.双精度 double
val aDouble: Double = 1.0
//2.Float
val aFloat: Float = 0.111F
//4.Int
val aInt: Int = 123123
//5.Short
val aShort: Short = 223
//6.long
val aLong: Long = 312381923882
//7.char
val aChar: Char = 'd'
//8.string
val aString: String = "啦啦阿拉阿娇活动空间撒成本,啊,是否萨克的纪念萨科的萨才能"

kotlin 数字字面量

eg:
//十进制
var a1 = 1
//十六进制
var a2 =0x1
//var a3 =01
//二进制
var a4 = 0b00000
//指数形式
var a5 = 1.2E10

char类型

占两个字节、表示一个16位的Unicode字符,单引号 ‘’ 引起来 
eg:’a’ ‘0’ ‘\n’

转义符

转义字符 含义
\t 制表符
\b 光标后退一个字符
\n 光标回到行首
\r Int
\’ 单引号
\” 双引号
\ 反斜杠
$ 美元符号,Kontlin支持美元符号开头的字符串模版
eg:
//hello "张三"
println("hello\"张三\"")
//$1000
println("\$1000")

基本类型转换

不支持隐式转换

eg:
var anInt: Int = 2
var numLong: Long = anInt.toLong()

字符串

“一串”Char,用双引号 “” 引起来

eg:
val string1: String = "HelloKotlin"
var stringChars: String = String(charArrayOf('H', 'e', 'l', 'l', 'o', 'K', 'o', 't', 'l', 'i', 'n'))

字符串比较

string1 == stringChars 等价于equals
string1 === stringChars 比较对象是否为同一个 比较对象的引用值

字符串模版

格式的输出,支持字符串、表达式、函数

eg:
val string1: String = "HelloKotlin"
fun a():String{
   
  return ",你好!"
}
println("${string1}!")
println("${1+3}")
println("张三${a()}")

拆箱装箱与Char数据类型

不在区分拆箱和装箱

类和对象

类申明

类是一个抽象的概念,是具有某些特征的事物的概括,不特定指代任何一个具体的事物
eg: 人、动物 …
定义:
和Java一样,Kotlin中使用关键字class来声明一个类。

//没有属性、方法的a类
class a{
   }

类的申明包含三部分:类名、类头(指构造参数、构造方法等)、类体(用大括号包裹的部分)。类头和类体这两个部分并非必要的。

//没有属类头,类体的a1类
class a1

属性和赋值

//申明属性,并初始化
class a2{
   
    var name = "张三"
    var age = 12
}

属性延迟初始化

Kotlin提供了延迟初始化的方式来解决初始化的问题,使用关键字lateinit即可。
注:Kotlin并不支持对原生类型进行lateinit,因为Kotlin会使用null来对每一个用lateinit修饰的属性做初始化,而基础类型是没有null类型,所以无法使用lateinit。

//申明属性,并初始化,address延迟初始化
class a3{
   
    var name = "张三"
    var age = 12
    lateinit var address: String
}

创建对象和访问属性

var a = a3()
a.address="丁家桥"
println("姓名:\t${a.name}")
println("年龄:\t${a.age}")
println("地址:\t${a.address}")

Kotlin的类会对每个声明的属性自动生成对应的get/set方法,只读类型的val只有get方法,可变类型的var有get/set方法。相比Java的get/set方法,Kotlin显得要简洁得多。

get/set方法

class a3{
   
var name = "张三"
var age = 12
get() {
   
//name的get/set方法输出一句话 field 是name 正真的值
println("我是${name}")
return field
}

Kotlin提供的备用字段(关键字field)的使用范围仅限于属性的get/set方法。

主构造函数

使用场景:属性需要在对象创建时就进行初始化,则需要用到自定义构造函数了。
Kotlin中的类可以拥有一个主构造函数以及多个次构造函数,主构造是类头的一部分,使用关键字constructor声明并且跟在类名之后。

//a4 属性name,age
class a4(name: String, age: Int) {
   
    var name = name
    var age = age
}

构造函数中的name和age是形参,类体中的name和age是类的成员变量。
当构造函数没有注解或者可见性声明时,constructor关键字可以省略不写。
但如果构造函数带有可见性声明和注解时,constructor关键字则不可省略,且可见性声明应该在constructor关键字之前。

//带有可见性申明
class a5 public constructor(name: String, age: Int) {
   
    var name = name
    var age = age
}

Kotlin类的主构造函数不能包含任何代码,所以,如果你想做一些初始化操作,可以使用init初始化代码块来完成。

class a5 public constructor(name: String, age: Int) {
   
    var name = name
    var age = age

    init {
   
        if (name != "李四") {
   
            this.name = "李四"
        }
    }
}

Kotlin中,类属性既可以在声明出直接进行初始化,也可以在init代码块中进行初始化操作。(个人认为直接在实体中把形参赋给成员变量会直观一点)

次构(二级)造函数

次级构造函数不能省略consructor关键字。
当类拥有主构造函时,任何一个二级构造函数都需要直接或间接通过另一个二级构造函数代理主构造函数。
类中的一个构造函数代理另一个构造函数,需要使用关键字this。

class a6(age: Int) {
    //z1 主构造函数
    var name 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值