2.2 Kotlin的Hello Word程序与Java的Hello World的class文件对比
来源:互联网 发布:工业英语翻译软件 编辑:程序博客网 时间:2024/05/16 12:38
写在前面
Koltlin本质上是基于JVM的语言,也就是说Kotlin语言编写的源码最终是生成Java字节码.class文件,在Java虚拟机上执行:
本文以Kotlin和Java的Hello World程序为例,展示如何编写编译运行Kotlin程序,以及如何利用反编译工具,了解Kotlin编译器生成的代码与Java的区别,进而了解Kotlin的机制。
- Kotlin语言支持的语法特性,是通过附加Kotlin基本库实现;
- Kotlin编写的代码可能有Kotlin编译器加入很多附加的代码,以在Java平台上实现Kotlin语言特性;
- Kotlin生成的Hello World程序字节码大小有957KB,Java编写的代码大小有423KB;
Kotlin的Hello Word
新建hello.kt文件,输入以下代码:
fun main(args: Array<String>) { println("Hello,World!") }
编译并执行:
// 仅仅编译hello.kt,不带kotlin运行库,产生HelloKt.class kotlinc hello.kt -d D:\kotlin_code // 引入运行时jar包以及HelloKt.class的目录,运行 kotlin -cp D:\kotlinc\lib\kotlin-stdlib.jar;D:\kotlin_code\ HelloKt // 或者直接用java命令执行 java -cp D:\kotlinc\lib\kotlin-stdlib.jar;D:\kotlin_code\ HelloKt
分析
- 编译以后,产生也是字节码文件,HelloKt.class 文件,运行可以直接使用java命令;
- 使用java反编译工具JD-GUI查看HelloKt.class文件,内容如下:
// Kotlin引入了多个自己的类import java.io.PrintStream;import kotlin.Metadata;import kotlin.jvm.internal.Intrinsics;import org.jetbrains.annotations.NotNull;// @Metadata 元数据注解,是由Kotlin编译器支持的,供kotlin编译器和反射使用// 该注解具有多个参数,指明了Kotlin相关的元数据信息,一次为:// mv:该注解的版本信息,bv:该class文件的字节码版本信息,k:注明该Kotlin文件的类型,d1:对应类型的元数据格式// d2: 附加到d1的元数据信息@Metadata(mv={1, 1, 7}, bv={1, 0, 2}, k=2, d1={"\000\022\n\000\n\002\020\002\n\000\n\002\020\021\n\002\020\016\n\000\032\031\020\000\032\0020\0012\f\020\002\032\b\022\004\022\0020\0040\003?\006\002\020\005"}, d2={"main", "", "args", "", "", "([Ljava/lang/String;)V"})public final class HelloKt{ // 参数加入@NotNull注解,该注解检查参数,如果参数为null时,无法编译 // @NotNull注解是Kotlin库中的注解类 public static final void main(@NotNull String[] args) { // Intrinsics(基础类)检查参数是否为null,如果为null,则抛出异常信息:args Intrinsics.checkParameterIsNotNull(args, "args"); String str = "Hello, World!"; System.out.println(str); }}
Java的Hello World
用记事本新建Hello.java文件,输入代码:
public class Hello { public static final void main(String[] args) { String str = "Hello, World!"; System.out.println(str); }}
编译并执行,编译生成Hello.class
javac Hello.java java Hello
使用工具JD-GUI反编译Hello.class,内容如下,基本和Java源码一致;
import java.io.PrintStream;public class Hello{ public static final void main(String[] paramArrayOfString) { String str = "Hello, World!"; System.out.println(str); }}
阅读全文
0 0
- 2.2 Kotlin的Hello Word程序与Java的Hello World的class文件对比
- Kotlin的hello world
- JAVA的Hello World程序
- JAVA 的HELLO WORLD
- JAVA的Hello World
- Hello World 程序的起源与历史
- Applet的Hello World程序(java)
- java的第一个程序 ----Hello World
- SDK的hello world程序!
- ACIS 的 hello world 程序
- 汇编语言的Hello world程序
- Hello world程序的生命周期
- Django 的hello world 程序
- Hello World程序的由来
- angularjs的hello world程序
- java的hello world出错
- 我的JAVA"Hello World"
- 《深入解析Hello,World》 :第三章 java源代码是怎样变成class文件的
- tensorflow1.3 API学习笔记 1
- 快捷键
- 关于 IOC 和 AOP的释义
- 51nod 1092 回文字符串
- Android--WakeLock机制详解
- 2.2 Kotlin的Hello Word程序与Java的Hello World的class文件对比
- 测试用例的书写方式及测试模板大全
- ECNUSUM2 D hihoCoder1485
- 地面三维激光扫描仪的工作原理
- http和https简介及区别
- 香港主机如何进行301重定向设置
- C++构造和解析Json
- "Gradient Domain Guided Image Filtering"论文中边缘权重函数matlab实现代码
- 电商平台对接(一)