kotlin方言(对比其它语言)
环境:
mac 安装 kotlin
sudo brew install kotlin
ide: idea
先测试java
public class allen { public static void main(String[] args) { System.out.println("fuck you java"); } }
liuhailongdeAir:src liuhailong$ ls allen.java liuhailongdeAir:src liuhailong$ java allen.java 错误: 找不到或无法加载主类 allen.java liuhailongdeAir:src liuhailong$ javac allen.java liuhailongdeAir:src liuhailong$ ls allen.class allen.java liuhailongdeAir:src liuhailong$ java allen.class 错误: 找不到或无法加载主类 allen.class liuhailongdeAir:src liuhailong$ java allen. 错误: 找不到或无法加载主类 allen. liuhailongdeAir:src liuhailong$ java allen 1d 37 1d 37 c 13 15 10 10 26 d 2f 1b 10 40 40 3t3tMTVQQcNl1Q// liuhailongdeAir:src liuhailong$ javac allen.java liuhailongdeAir:src liuhailong$ java allen fuck you java liuhailongdeAir:src liuhailong$
kotlin编译:
第一种方式: (出错)
kotlinc test.kt -include-runtime 或kotlinc test.kt -include-runtime -d allen
java TestKt
fun main(args: Array<String>) { println("fuck you kotlin"); }
liuhailongdeAir:src liuhailong$ ls test.kt liuhailongdeAir:src liuhailong$ kotlin test.kt -include-runtime error: could not find or load main class test.kt liuhailongdeAir:src liuhailong$ kotlinc test.kt -include-runtime liuhailongdeAir:src liuhailong$ ls META-INF TestKt.class test.kt liuhailongdeAir:src liuhailong$ javap TestKt.class Compiled from "test.kt" public final class TestKt { public static final void main(java.lang.String[]); } liuhailongdeAir:src liuhailong$ ls META-INF TestKt.class test.kt liuhailongdeAir:src liuhailong$ ls META-INF TestKt.class test.kt liuhailongdeAir:src liuhailong$ kotlinc test.kt -include-runtime liuhailongdeAir:src liuhailong$ ls META-INF TestKt.class test.kt liuhailongdeAir:src liuhailong$ java TestKt.class 错误: 找不到或无法加载主类 TestKt.class liuhailongdeAir:src liuhailong$ java TestKt Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at TestKt.main(test.kt) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more liuhailongdeAir:src liuhailong$ kotlinc test.kt -include-runtime liuhailongdeAir:src liuhailong$ kotlinc test.kt -include-runtime -d allen liuhailongdeAir:src liuhailong$ ls META-INF TestKt.class allen test.kt liuhailongdeAir:src liuhailong$ cd allen liuhailongdeAir:allen liuhailong$ ls META-INF TestKt.class liuhailongdeAir:allen liuhailong$ java TestKt.class 错误: 找不到或无法加载主类 TestKt.class liuhailongdeAir:allen liuhailong$ java TestKt Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at TestKt.main(test.kt) Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more liuhailongdeAir:allen liuhailong$
第二种方式
kotlinc test.kt -include-runtime -d allen.jar
java -jar allen.jar
liuhailongdeAir:allen liuhailong$ kotlinc test.kt -include-runtime -d allen.jar error: source file or directory not found: test.kt liuhailongdeAir:allen liuhailong$ cd .. liuhailongdeAir:src liuhailong$ cd .. liuhailongdeAir:testa liuhailong$ ls out src testa.iml liuhailongdeAir:testa liuhailong$ cd src/ liuhailongdeAir:src liuhailong$ kotlinc test.kt -include-runtime -d allen.jar liuhailongdeAir:src liuhailong$ ls META-INF TestKt.class allen allen.jar test.kt liuhailongdeAir:src liuhailong$ java -jar allen.jar fuck you kotlin liuhailongdeAir:src liuhailong$
原因是他自动生成一个类,还有很多依赖项(同时自动改名 )
解压 jar 包
查看 class 文件
liuhailongdeAir:IdeaProjects liuhailong$ ls testa testjava testkotlin liuhailongdeAir:IdeaProjects liuhailong$ cd testa liuhailongdeAir:testa liuhailong$ ls out src testa.iml liuhailongdeAir:testa liuhailong$ cd src/ liuhailongdeAir:src liuhailong$ ls META-INF allen test.kt TestKt.class allen.jar liuhailongdeAir:src liuhailong$ javap TestKt.class Compiled from "test.kt" public final class TestKt { public static final void main(java.lang.String[]); } liuhailongdeAir:src liuhailong$
因此在 idea 中有个设置入口类名称就是填对应的名称加 Kt ,同时第一个字母要大写
方言:(pascal风格 swift 也是)
变量的类型在后面 ,可以不写类型 var 定义自动推断类型。
函数有声名,返回值类型在后面与 swift 一样但格式不一样
\\js 弱类型语言返回值自动推断 function add2(x,y) { sum = x + y; return sum; } \\swift 强类型 func sayHello(personName: String) -> String { let greeting = "Hello, " + personName + "!"//let常量 return greeting } \\kotlin fun add(m:Int,n:Int):Int{ return m+n }
when(switch)每个分支中自动 break 格式 为xx ->()( swift用关键字case 也没有 break)
when 中可能有范围用 in (swift 也可以有 )
类
//swift
class MarksStruct { var mark : Int init(mark : Int) { self.mark = mark } }
//java
class Person{ String name; int age; public void tell(){ System.out.println("姓名:"+name+" "+"年龄:"+age); } }
//kotlin 构造函数与类型可以合到一起使用
class Customer(name: String) { init { logger.info("Customer initialized with value ${name}") } } class allen() {}
get/set 方法
//java
public class User { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }
//kotlin
class User { val username:String get()=allen set(value:String) { allen=value } }
//swift
var _name:String? var name:String?{ get{ return _name; } set{ _name = newValue } //同时有个回调 当被修改时调用 didSet { NSLog("已经改变的时候", []); } }
接口 枚举 抽象类与关键字与 java一样
继承 有点不一样 当一个类可以被 其它类继承时 这个类前面加关键字 open
kotlin 与 oc swift 一样有扩展功能
kotlin 中的泛型与 java 类似
java中的静态类成员在kotlin中用陪伴对象实现 也就是kotlin没有静态类成员
kotlin 有委托功能 类通过关键字 by 属性通过 operator
kotlin一样支持函数对象 高阶函数 装饰 闭包 lambda
- 4.1 Java语言和Kotlin语言对比(2) 泛型和数组
- 4.1 Java语言和Kotlin语言对比(1)-基础类型
- 4.1 Java语言和Kotlin语言对比(3)
- Kotlin对比Java——高效Android开发语言,值得一探究竟......
- 用于 Android 开发的 Kotlin:是重量级语言还是毫无意义的炒作?
- Kotlin 语言下设计模式的不同实现
- 一个功能,两个平台,三种语言 -(iOS,Swift,Android)App代码实现对比篇
- Sybase:基本语言元素(对比sqlserver)
- Android用Kotlin语言设置 TextView中图文混合排列
- (基础) class 与 c 语言对比学习-OC+class
- Kotlin 为何能成为 Android 官方支持开发语言及Kotlin开发Android应用初体验
- Atian inputmethod 输入法解决方案 方言与多语言多文字支持 英语汉字汉语阿拉伯文的支持 (au
- 第03天OC语言(09):继承其它特性
- c++ java c#语言特性对比
- 在Android studio3.0 用kotlin语言开发Android app demo
- Ruby和其它类似语言的比较
- 谷歌宣布Kotlin成Android开发一级语言
- KOTLIN开发语言文档(官方文档) -- 入门
- 初学python(对比java语言不同) 第一篇
- HaXe学习笔记:HaXe语言和其它编程语言的区别