作为一门语言的入门第一章,我们有必要弘扬学习一门语言的一贯作风,写一个hello world
.打开Idea->create project->左边选择kotlin->console application->next->给项目起个好名字->ok.
这样我们就创建了一个kotlin的项目,里面只有一个Main类,跑一下Main类的main函数
这样我们就完成了kotlin
的首次之旅,kotlin
和idea
都是jetbrain
的产品.jetbrain
为了推广kotlin
,将其内置在了idea
当中,所以我们可以直接使用idea
来创建项目而不用安装sdk.
我们来看下这个main
文件到底是什么鬼,怎么后缀名还是kt
结尾的?
fun main(args: Array<String>) {
println("Hello World!")
}
这里推荐使用idea
的kotlin
插件,tools->kotlin->show kotlin ByteCode->Decompile,这样我们就可以把main
类的字节码文件反编译成java文件,可以kotlin葫芦里到底卖的什么药.后面kotlin的很多语法糖我们可以用它来研究,所以有必要学会使用这个插件.
public final class MainKt {
public static final void main(@NotNull String[] args) {
Intrinsics.checkNotNullParameter(args, "args");
String var1 = "Hello World!";
System.out.println(var1);
}
}
看完是不是有点明白了,kt
文件最终会被解释成public final class
,那再在这个文件里面定义一个A
类呢?
fun main(args: Array<String>) {
println("Hello World!")
}
class A{
}
反编译看看
// A.java
import kotlin.Metadata;
public final class A {
}
// MainKt.java
public final class MainKt {
public static final void main(@NotNull String[] args) {
Intrinsics.checkNotNullParameter(args, "args");
String var1 = "Hello World!";
System.out.println(var1);
}
}
A
类也变成了final
,在java里面final
修饰的类不能被继承,我们建一个B
类继承A
类试试
报错了,这正符合我们的预期,因为final
不可被继承,我们根据idea
的提示,make A open
试试,kt
文件变成了这样
// A.java
import kotlin.Metadata;
public class A {
}
// MainKt.java
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;
public final class MainKt {
public static final void main(@NotNull String[] args) {
Intrinsics.checkNotNullParameter(args, "args");
String var1 = "Hello World!";
System.out.println(var1);
}
}
// B.java
import kotlin.Metadata;
public final class B extends A {
}
咦,A
类的final咋没了,哎,对鸟,这就是open
的作用,在kotlin
中不仅仅是定义在kt
文件中的类是final
的,所有的类都是final
的,所以如果我们要实现继承就得把final
去掉,open
关键字就是这个效果.
kt
文件里面不仅可以定义类,定义方法,定义属性,定义接口,定义很多多很多东西,在实际的运用中,我们可以把很多相似的东西定义成一个kt
文件,比如某一个模块的request
和response
dto的类全放到一个kt
文件里面,那项目就可以看起来清爽很多.
so much for this.让我们结束kotlin的首次之旅把.