常用kotlin语法记录和使用说明 转载请标明作者:晨诺星空junjiew

kotlin的语法和java有一定的差别,在使用的时候有一些语法还是容易不适应,所以记录下来一些经常会用到的kotlin语法并带有注释和说明,方便更多人也方便自己在忘记时来查阅和使用~

1.关于创建对象

val a: Int = 100
println(a === a) // true,值相等,对象地址相等

//经过了装箱,创建了两个不同的对象
val boxedA: Int? = a
val anotherBoxedA: Int? = a

//虽然经过了装箱,但是值是相等的,都是100
println(boxedA === anotherBoxedA) //  true,值相等,128 之前对象地址一样
println(boxedA == anotherBoxedA) // true,值相等

这里把 a 的值换成 100,这里应该原理跟 Java 中是一样的,在范围是 [-128, 127]之间并不会创建新的对象,比较输出的都是 true,从 128 开始,比较的结果才为false。
如果这里a的值超过了127,则两个对象值是相等的,但是对象的地址是不同的。
关于创建对象的优化:我们都知道java里面对new关键字的引用比较谨慎,为了避免内存消耗,尽量少使用new为优化原则,特别是尽量避免在循环中创建对象,这个应该在kotlin中也同样适用!

2.关于!!与?修饰变量的区别描述:

var a:String? = null
a!!.print()  //a为空时停止执行,做短路操作,项目运行中会出现空指针崩溃
a?.print()  //a为空时继续执行,但会抛出异常,但项目并不会报空指针而崩溃直接,是比较安全的一种用法

当我们直接调用一个可空变量的某方法或某成员变量时:
这里写图片描述
Android Studio会提示在一个可空变量上,只有"安全调用"(safe call (?.))和"不为空的断言调用"(non-null assert call(!!.))是被允许的,
可以得知"!!"相当于是短路操作,即:

//kotlin中的
a!!.print()  
// 相当于java中的  
if(a==null){
 throw new NullPointerException()
}

而"?"相当于是安全类型的捕获或者抛出异常操作,即:

//kotlin中的
a?.print()  
// 相当于java中的  
if(a!=null){
   a.print()
}

3.java中 extends kotlin用 (冐号):代替。
例如:java中:MainActivity extends Activity,
kotlin中:MaiActivity :Activity()
4.java中没能返回值是void,返回值写在小括号左面

现在改成空方法是Unit,方法用fun1, fun2,代替, 并且返回值要写在小括号后面

fun Unit(x: Any, y: Any) {

funUnit(x: Any, y: Any): Int{

5.关于 switch case
java中 switch():

 switch(){
	case:
  breaak;
}

kotlin 中改变为 when() ->

fun main(args: Array) {

val language = if (args.size == 0) "EN" else args[0]

println(when (language) {

"python" -> "python!"

"java" -> "java!"

"kotlin" -> "you are a luckey dog!!!"

else -> "Sorry, I can't understand you in $language yet"

})

}

6.关于kotlin中的apply方法:
apply函数是这样的,调用某对象的apply函数,在函数范围内,可以任意调用该对象的任意方法,并返回该对象
代码示例

fun testApply() {
    // fun <T> T.apply(f: T.() -> Unit): T { f(); return this }
    ArrayList<String>().apply {
        add("testApply1")
        add("testApply2")
        add("testApply3")
        println("this = " + this)
    }.let { println(it) }
}

// 运行结果
// this = [testApply1, testApply2, testApply3]
// [testApply1, testApply2, testApply3]

7.关于for循环

//可以这样写
var isSubs = false
for (i in 0 until myList.size) {
	  val sku = ownedSkus[i]
	  Log.d(TAG,"sku =="+sku .toString())
	  if (sku=="sub_monthly"){
	     isSubs = true
	     //如果满足条件,直接return结束循环
	     return isSubs
	   }
               
}

//也可以这样的方式写
for (i in 0..99) {
print(i.toString())
}

8.activity跳转的时候,intent写法:

//写法一
var intent = Intent(this,YourActivity().javaClass)  
//写法二
var intent = Intent(this,YourActivity::class.java)   
//最后放到 startActivity()方法里面就行
startActivity(Intent(intent))

9.一个类中的变量想实现java中共的pulic static修饰效果,直接用类名可以调用

//在 var 修饰符前加 open就行
 open var zodiacZodiacDataMap: MutableMap<String, CompatibilityZodiacData>? = null

10.一个类中的方法与变量如果想实现java中的pulic static修饰效果,别的类可以直接用类名.调用出来可以这样写:

函数:
//在方法函数修饰符前加 open 并且放到 companion object {}中就行
 companion object {
        open fun shareMore(activity: Activity){
            val textIntent = Intent(Intent.ACTION_SEND)
            activity!!.startActivity(Intent.createChooser(textIntent, "Share"))
        }
    }
    
//调用时就可以直接用类名调用
 SharerUtil.shareMore(this)
 
变量:
//如果想要一个变量对外以静态的形式开放,使其可以直接通过类名调用出来,可以这样写
class MainActivity : AppCompatActivity() {

   companion object {
        open var webview22: WebView? = null

    }
}
//调用的时候这样调用:
MainActivity.Companion.getWebview22().loadUrl("http:baidu.com")

11.在kotlin中一些容器的创建方式:

	//int数组
    var inArray= intArrayOf(20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22)
    //字符串 数组
    var strArray = arrayOf("ss", "ss", "ss", "ss", "ss")
    //字符串  map
    var myDataMap: MutableMap<String, MyData>? = mutableMapOf<String,MyData>()
    //字符串list
    var strList = listOf( "ss", "ss", "ss", "ss", "ss")

	//创建一个不可变的list

	val mList = listOf<Int>(1, 2, 3)

	//创建一个可变的list

	val mList = mutableListOf<Int>(1, 2, 3)

	//这里mutableListOf初始化了三个值,如果没有这三个值就相当于一个空集合,比如

	 val mList = mutableListOf<Int>()

12.kotlin中生成指定范围随机数的方法:
  // 生成从0到2范围内的随机数(注意不包括2,实际生成的只有0和1)
   var radomnum = Random().nextInt(2)
   

最后声明:以上是我个人一些经验的总结与归纳,如果有写的不对的地方,欢迎留言指正,谢谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值