包
使用package关键字,与Java的包基本一致,稍微有几处区别:
- 文件路径和包路径可以不一致(java会报编译错误)。
- 属性和方法可以直接声明在包(又叫顶层声明)下,别的包中调用该方法需要导入包路径+方法名。
- 没有java中静态导入
import static
,统一使用import关键字。
修饰符
kotlin提供的修饰符与java类似,也有四种分别为:protected/private/internal/public。
与java不同的是
- 缺省情况下情况下视为public。
- internal表示模块可见
那什么是“模块”呢,比如在项目中一个Module就是一个模块。
官方的定义为:一个模块是编译在一起的一套Kotlin文件。
- 一个IntelliJIDEA模块;
- 一个 Maven 项目;
- 一个 Gradle 源集(例外是 test 源集可以访问 main 的 internal 声明);
- 一次 <kotlinc> Ant 任务执行所编译的一套文件。
下表对比了Kotlin和Java的修饰符,可以直观的看到他们的区别和联系。
修饰符 | Java | Kotlin |
---|---|---|
public | 任意可见 | 同Java |
private | 本类内部可见 | 同Java |
protected | 本类或子类可见 | 同Java |
缺省 | 包和子包中可见 | 同public |
internal | -- | 同模块可见 |
另外,internal关键字有一个bug,当将一个kotlin模块打成java包,并导入在一个非Kotlin编译环境下时,internal失效,与public作用域一样。
运算符
除常规的数学运算符与Java一致外,要关注一下位运算符。
位运算 | Java | Kotlin |
---|---|---|
与 | & | and |
或 | | | or |
取反 | ~ | inv |
异或 | ^ | xor |
左移 | << | shl |
右移 | >> | shr |
无符号右移 | >>> | ushr |
网友评论