java 转 Kotlin 快速入门①

java 转 Kotlin 快速入门①

本为参考kotlin文档,先感谢kotlin语言开发者、kotlin文档编写者、kotlin文档中文翻译者等:
新入手,如有错误烦请指出,谢谢!

  • AS新建Android工程使用Kotlin
  • 导包
  • 作用域
  • 函数定义
  • 感谢

AS新建Android工程使用Kotlin
使用新版AS是可以直接使用kotlin开发Android项目的。如下新建一个项目
Create New Project示例图

可以看到新版的AS有一个“Include Kotlin support”的勾选,就是让我们去引入kotlin的相关支持的配置。后面的步骤基本和原来的一致。
Activity示例图

从生成的Activity文件可以看出,文件后缀是.kt的,这个是符合kotlin语言,因为和原谷歌Android的sdk是兼容的,所以导入的包名基本一致。下面一点点看过去

导包
- 包名不等同于文件夹名称
- 包名不支持静态导入
- 导入的包名可以使用关键字“as”给它取别名 //这点和python一样。
- 如果没有声明包名,则使用默认的 default 包

import android.os.Bundle 
import android.support.v7.app.AppCompatActivity as ACA //取个别名
class MainActivity : ACA() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
     } 
 }

注:在AndroidManifest.xml中引用的class,都看包名,不看文件夹层次。

关键词解释:
模块 : 可以理解为当前这个文件
类 : 和java的类差不多,只是一个模块中可以有多个类(无论是否是public)
函数 : 也叫做“方法”,可以直接写在模块中,可以不写在类中的

作用域:
- private 声明的成员 只在这个类中可见(包括它的所有成员);
- protected 和private一样,只能在子类使用,不能声明在顶部;
- internal 在这个模块中开放,及它的内部成员;
- public 对所有模块开放,调用该成员需要导入对应包,什么都不写就默认是public。

基本和Java写法类似,只是多了个internal,相当于用在顶部的protected。

解释看不懂就看下面一段代码就明白了,红色下划线的表示错误的。
作用域示例图
编译器帮我们检查出来了错误。
通常把最外面一层称做顶部,然后就是类中,再就是方法体中。

顶部除了protected,其他都可以用;
类中就全部可以使用;
方法体中是不需要声明作用域的这点和Java写法一样。

看到public是灰色的,表示默认就是public的,就是说如果你忘了写类似的作用域,它就自动给你一个public,这点和Java不一样,要注意。(所以MainActivity的class前面没有写public)

关键符号 : 解释:
使用 “ :”冒号 表示所属的意思,
- 比如 “ fun 某函数():类型 ” ,就表示这个函数的返回值是这个类型;
- 在函数列表中如果是变量的话 “ a:Int ” 就表示这个参数a是需要整型的;
- 如果是类的话,例如 “A类:B类”,就说明A是B的子类。

函数定义

fun 方法名称(参数列表):返回值类型{
//方法体
}

  • 函数定义的话需要使用关键字“fun”
  • 方法名称和java的要求一样,只能下划线和字母开头
  • 参数列表写法 成员名称:类型名称 例如 a:Int

如果函数只有一个表达式,或者内容可以写成一个表达式,则可以将函数写法简单化:

fun 方法名(参数列表):返回类型 = 方法体

如果函数没有返回值,返回值类型可以写成“Unit”
或者省略不写。
另外需要注意kotlin可以函数包函数,就像类里面包函数差不多。

//类中包函数
class Test {
    fun test() {//成员函数
    }
}
//函数中包函数
fun Test2(){
    fun test2(){//局部函数
    }
}

感觉函数和类有点分不清了,调用的时候也几乎一样的,调用顶部方法只需要包名打点调用即可。不过需要注意的是类可以打点调用它的成员函数,函数不能打点调用它的局部函数

如果是在Android环境下的话,要覆写一个方法,需要关键字“override”写在fun前面,表示覆盖父类的这个方法。
另外稍微解释一下为什么 Bundle后面带?,意思是 类型后面加?表示这个参数可为空。

感谢:
https://www.gitbook.com/book/huanglizhuo/kotlin-in-chinese/details
http://kotlinlang.org/docs/reference/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值