Kotlin学习笔记(一)

   最近在学习Kotlin相关的知识,总结一些基础知识,个人感觉容易遗忘,在这里记录,方便以后回顾。

    1 分隔符;Kotlin里面的分号(;),花括号({}),方括号(),圆括号(),空格,圆点(.),都具有特殊的分隔作用,因此被通称为分隔符。

  1. 1分号:与Java不同,Kotlin不强制要求每条语句必须以分号结尾,当然也可以使用分号表示语句结束。如果打算在同一行内写多条独立的语句,则前面语句需要使用分号表示结束。Kotlin允许一条语句可以跨多行。但是一个字符串,变量名不能跨多行。如下             

           var str="fkit" 

          str+=

           ".org"               可以

         var na

              me="app"           不可以

注:从可读性来讲,避免在一行内书写多条语句。

   2 空格:Kotlin语言使用空格分隔一条语句的不同部分,但不要使用空格把一个变量名分隔成两个。

  3 标识符:用于给程序中的变量,类,枚举,函数等命名的名字。标识符的长度没有限制。使用标识符时,注意以下规则:

   3.1 标识符不能以数字开头。3.2 不能是Kotlin的硬关键字。3.3 不能包含空格。

  4 Kotlin关键字

  4.1 硬关键字:无论是什么时候都不能用作标识符,包括: 4.1.1 as 用于做类型转换或为

Import 语句指定别名。 4.1.2 as? 类型安全的类型转换运算符。 4.1.3 in: 在for循环中使用;in还可作为双目运算符,检查一个值是否处于区间或集合内;in也可在when 表达式中使用;in还可修饰泛型参数 4.1.4 is 用于做类型检查 !is 用于类型检查或在when表达式中使用。4.1.5 object 声明对象表达式或定义命名对象  4.1.6 val 声明只读属性或变量  4.1.7 var 声明可变属性或变量  4.1.8 when 用于when表达式。

4.2 软关键字:

    4.2.1 by 用于将接口或祖先类的实现代理给其他对象  

4.2.2 constructor 用于声明构造器   4.2.3 delegate 用于指定该注解修饰委托属性存储其委托实例的字段     4.2.4 dynamic 用于指定在Kotlin/JavaScript中引用一个动态类型   4.2.5  field : 用于指定该注解修饰属性的幕后字段   4.2.6 file 用于指定该注解修饰源文件本身。    4.2.7 init 用于声明初始化块  

  4.3  4.3.1 abstract 用于抽象类或抽象成员  4.3.2 annotation 用于修饰一个注解类   4.3.4  companion 用于声明一个伴生对象   4.3.5 data 声明数据类

   4.3.6 external 用于声明某个方法不由Kotlin实现   4.3.7 infix 该函数能以双目运算符的格式执行。    4.3.8 internal 用于修饰只能在当前模块内可见。   4.3.9 lateinit 修饰一个non-null属性,指定改属性可在构造器以外的地方完成初始化。 4.3.10 sealed 用于声明一个密封类   4.3.11 tailrec 修饰一个函数可作为尾随递归函数使用。

5 声明变量

  Kotlin是强类型语言,要求所有的变量必须先声明,后使用。格式如下:

    var|val   变量名[:类型]= 初始值 例子:

  Kotlin允许在已有数据类型后添加“?”,添加“?”后的数据类型相当于对原有类型进行了扩展,带? 的数据类型可支持被赋予null值。

两个Char型值进行相减:Kotlin将用两个Char型值对应的字符编码进行减法运算,最后返回Int类型的值。两个Char型值不能相加。

var c1='i'
	var c2='k'
	println(c1+5)  // n
	println(c1-c2) //-2

var num2:Int? =str.toIntOrNull()// 其中Int?就是可空类型,这种类型的变量可接受Int值和null.

//	var b: String?="fkt"
	var b: String?=null
	var len1=if (b !=null) b.length else -1
	 println(len1);
上面是Elvis运算,其实就是if else 的简化写法。

var b: String?="fkt"
	println(b!!.length)
用 “!!.”强调调用可空变量的方法或属性,这样强制调用可能引发NPE.
val str="fkjava.org"
	val str2="FHJEK.org"
	println(str.capitalize())  //首字母大写Fkjava.org
	println(str2.decapitalize()) //首字母小写fHJEK.org
	
	var str3="java886"
	println(str3.contains(Regex("\\d{3}")))//true

var a=20;
//	val b=-a;
//	val c=a.unaryMinus();
//	println("b: ${b},c:${c}");//b: -20,c:-20
//	val flag=true
//	
//	val notFlag1=!flag
//	val notFlag2=flag.not()
//	println("notFlag1:${notFlag1},notFlag2: ${notFlag2}");
	//notFlag1:false,notFlag2: false
	
	//双目运算符  a+b a.plus(b)   a*b  a.times(b)  a/b  a.div(b)    a%b a.rem(b)
	//a..b  a.rangeTo(b)  
	
	// a in b   b.contains(a)       a !in b   !b.minus(a)
	//println(b.contains(a))


var str="kfk.org"
	println(str.contains("fk")) // true
	println("java" in str)  // false
	
	val array=arrayOf(24,45,100,-3,30)
	println(array.contains(100))//  true
	println(100 in array) // true


var str2="fkjava.org"
	println(str2.get(2))  //j
	println(str2[2])      //j
	
	var list=java.util.ArrayList<String>()
	list.add("Java")
	list.add("Kotlin")
	list.add("Go")
	println(list[1])  //Kotlin
	list[2]="Swift"
	println(list)     //[Java, Kotlin, Swift]

//----调用运算符-----
	// a()     a.invoke()
	// a(b)     a.invoke(b)
	// a(b1,b2)   a.invoke(b1,b2)
	val s="java.lang.String"
	val mtd=Class.forName(s).getMethod("length")
	println(mtd.invoke("java"))//4
	println(mtd("java")) //4
// java提供的“=="和”!=“ 在Kotlin中则由”===“和”!==“代替
	// 位运算符  xor 按位异或          inv 按位非    ushr 无符号右移

//	println(5 or 9)  //13

	// 闭区间运算符
//	var range1=2..6
//	for(num in range1){
//		println("${num} * 5 =${num * 5}")
//	}
	/*
	 *2 * 5 =10
	3 * 5 =15
	4 * 5 =20
	5 * 5 =25
	6 * 5 =30
	 */
	
	
	// 半开区间运算符
    val books=arrayOf("Swift","Kotlin","C","C++")
	for( index in 0 until books.size){
		println("第${index +1}种语言是: ${books[index]}")
	}
//	第1种语言是: Swift
//	第2种语言是: Kotlin
//	第3种语言是: C
//	第4种语言是: C++
	
	//反向区间
	var range1=6 downTo 2
	for(num in range1){
		println("${num}*5= ${num * 5}")
	}
//6*5= 30
//5*5= 25
//4*5= 20
//3*5= 15
//2*5= 10

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值