写点什么

从 HelloWorld 看 Java 与 Kotlin

作者:子不语Any
  • 2022-11-14
    湖南
  • 本文字数:1684 字

    阅读完需:约 6 分钟

从HelloWorld看Java与Kotlin

前言

本系列主要是介绍Kotlin好用特性的文章。记录下自己在团队中推广Kotlin的历程,不求鞭辟入里,但尽可能保证有趣不枯燥。这系列文章就是从前期“拒绝” Kotlin,到逐渐接受并使用而积累起来的“真香”部分。

本文大纲


Java 版本 Hello World


public class HelloWorld {    public static void main(String[] args) {  // 声明 main 函数        System.out.println("Hello world!");    }}
复制代码


相信 Java 开发者进入 Java 世界大门编写的第一个 Java 程序就是HelloWorld.java。但应该不止看一眼就记住了它。虽然是最基本的 Java 程序,但也有它不“太好记住”的点:比如必须声明一个名为 main 的并且由public static 修饰的函数,这个函数入参必须是有且仅有一个 String[] 数组。漏其中一个,它就没法运行起来。


Kotlin 版本 Hello World


fun main() {    println("Hello world!")}
复制代码


很简洁,没有其他多余的代码,也很容易记住。写起来也是快乐的,是吧?但肯定也有很多疑问,那我们就一起来了解一下Kotlin

1. Kotlin 版的 Hello world 没有声明类

这很不 Java!要知道 Kotlin 或者其他基于 JVM 的语言无论怎么设计,最终也是要在 JVM 上运行,而 JVM 恰好就是一套基于类来设计的运行机制,和 Java 的思想是一致的。Kotlin 现在自己搞一套,连类都没有了,怎么在 JVM 上跑?


这其实是 Kotlin 编译器的功劳。这点很重要,以后遇到 Kotlin 的新特性,和 Java 对不上时,就回想这点:都是 Kotlin 编译器的功劳,它把 Kotlin 代码转换成了符合 Java 思想的 字节码小本本记好,这句话将贯穿整个 Kotlin 学习


如果用过 jadx 的话,可以进行反编译试试。结论是:HelloWorld.kt 会被编译为一个叫 HelloWorkKt 的类

2. Kotlin 语句没有分号

回顾以前的编程语言如 C/C++, Java,一行完整的代码都会用分号来分隔。后面新出的语言一部分是柔和派,分号变为可选;另一部分是激进派,直接去掉了分号。Kotlin 属于柔和派,如果加上分号,IDE 会提示没得必要,但也不会报错。如果要把两行代码写成一行,中间必须加一个分号。

3. Kotlin 函数的声明通过 fun 关键字

Java 是不需要关键字来声明函数的。但以 JavaScript 为首的语言认为,函数是一等公民,应当做一个对象看待。这样函数就可以被持有,被传递,提高灵活性。所以像 JavaScript 这样的语言,方法声明会带有关键字,否则就不知道到底是在调用一个函数,还是在执行一个函数。


Kotlin 也支持函数是一等公民,所以声明函数时需要关键字。Java 其实也有类似的东西,叫匿名类。

4. Kotlin 函数属性默认是 public

Java 默认是default可以不写,还有 public,protected,private 等修饰符

5. 函数默认返回值是 Unit

Java 函数没有默认返回值,需要显式声明为 voidKotlin 不需要声明则返回为 UnitUnit 是一个类,而且是一个单例。


为啥 Kotlin 不用 void 呢?因为声明返回值为 Unit 可以让一切对象化,在某些场景可以简化代码编写。举一个简单的情况,可写成 return println("Hello world!"),不再需要写成两行。


如果需要声明返回类型,则在函数声明末尾以: 类型的方式声明,如:fun getString(): String

6. println 代替了 System.out.println

学习 Java 的时候应该都觉得写个打印语句有点繁琐(不用快捷键的情况下) 是因为 Java 是严格按照对象调用的规则办事,方法必须是属于类的。


Kotlin 是怎么做到不用指定对象也能调用方法呢?是有顶层声明(top-level declaration)的特性。就如上面提到的,Kotlin 编译器会把顶层声明的函数编译成对象方法调用的形式。顶层声明还有很多酷炫的能力,比如给任意一个类增加方法,后面会有应用场景。


以上就是 Kotlin 版 Hello world 涉及到的知识点。其实要弄懂 JavaHello world 也很费劲的,只是已经度过那个初学的阶段了。在 Java 的基础上对比去理解 Kotlin 相对还是比较简单的,如果有其他语言的开发经验那就更简单了,因为 Kotlin 的特性,基本都能在某个语言上找到,Kotlin本身并不是这些新特性的创造者。

总结

本文主要是从最基本 Hello World 程序对比 Java 版本,学习到Kotlin的基本特性。通过对比更容易理解和记住这些特性,这也是学习一门编程语言很有效的方法。

发布于: 刚刚阅读数: 3
用户头像

子不语Any

关注

If not now,when? 2022-09-17 加入

安卓攻城狮

评论

发布
暂无评论
从HelloWorld看Java与Kotlin_kotlin_子不语Any_InfoQ写作社区