参考链接

Kotlin官方文档

https://kotlinlang.org/docs/home.html

中文网站

https://www.kotlincn.net/docs/reference/properties.html

pdf也可以在这里下载

https://www.kotlincn.net/docs/kotlin-docs.pdf

大部分示例来自bilibili Kotlin语言深入解析 张龙老师的视频

Kotlin调用Java

Part1

知识点

1 调用Java model类

2 平台类型

3 Kotlin调用Java时的空检查变得松动

笔记

Java类:

public class People {private String name;private int age;private boolean married;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isMarried() {return married;}public void setMarried(boolean married) {this.married = married;}
}

Kotlin类

// Kotlin调用Java
fun main() {val list = ArrayList<Any>();list.add("hello")list.add("world")list.add("hello world")for (item in list) {println(item)}println("-----------")for (i in 0 until list.size) {println(list[i])}println("-----------")// 调用Java model类val people = People()people.age = 25people.isMarried = falsepeople.name = "zhangsan"println(people.age)println(people.isMarried)println(people.name)println("-----------")/*** Kotlin调用Java代码时 Kotlin的空检查可能会失效** 在Java中 所有引用都可能为null 在Kotlin中 对null有着严格限制* 在Kotlin中 将来自Java的声明类型称为平台类型(Platform Types)* 对于这种类型(平台类型)来说 Kotlin的null检查会变得缓和 不再那么严格.* 这么做的目的是使得空安全的语义在Java和Kotlin中保持一致* 当我们调用平台类型引用的方法时 Kotlin就不会在编译期间施加空安全检测 使得编译可以通过* 但是在运行时可能抛出异常 因为平台类型的引用值可能为空*/// 当我们调用平台类型引用的方法时 Kotlin就不会在编译期间施加空安全检测 demo// ArrayList是一个平台类型 可以看它的定义 不过是Java ArrayList的一个别名// ArrayList是一个平台类型 Kotlin不会对其施加严格的空检查 list2[0]可能报错val list2 = ArrayList<String>()//list2.add("hello")val size = list2.sizeval item = list2[0] //数组越界// 是否是平台类型由Kotlin编译器自己识别 无法主动创建一个平台类型val s: String? = item // 允许// 为什么s2是一个非空类型的String 却可以将其赋值为一个可能为空的item? 因为这是一个平台类型 Kotlin的检查不再严格val s2: String = item // 允许 但是运行时可能报错(如果item为空)// kotlin 非空检查的原理: 如果声明一个非空类型 则会在该变量赋值时产生一个断言 断言赋值不为空 如果断言失败 则编译期就报错/*** 如果我们使用了不可空的类型 编译器会在赋值时生成一个断言。这会防止Kotlin的不可空变量持有一个null值;这一点也适用于方法的参数传递* 我们在一个平台类型值传递到不可空的参数或方法参数时 也同样会生成这个断言 但是该断言只能检测明显空的情况** 总体来说 Kotlin会竭尽所能防止null赋值蔓延到程序的其他地方 而是在问题发生时就立刻通过断言来解决*/
}class D0508KotlinCallJava {
}

Part2

知识点

1 对比Java与Kotlin的数组

详情参见Java类MyTest 与Kotlin类 D0508KotlinCallJava2种 objects的定义

2 Kotlin类调用Java的普通方法

3 使用下标访问数组更快捷

4 Kotlin类调用Java的可变参数的方法

笔记

Java class *2

// 配套在D0508KotlinCallJava2
public class MyArray {public void myArrayMethod(int[] args) {for (int a : args) {System.out.println(a);}}public void myArrayMethod2(String... strings) {for (String a : strings) {System.out.println(a);}}
}public class MyTest {public static void main(String[] args) {Object [] objects = new String[3];// Java的数组设计的是有问题的// 这里声明的是Object数组 因此可以放入任意类型// 然而它实际指向的是一个String数组 因此运行时报错objects[0] = 1;objects[1] = "aaa";}
}

Kotlin class

/*** Java与Kotlin在数组 上的区别* Kotlin中的数组是不变的(相对于协变和逆变) 这一点和Java不同(Java是协变的)* 因此 Java的数组设计是有问题的* 这意味着 我们无法将Array<String> 赋值给Array<Any> 可以避免运行时异常** Kotlin提供了原生类型数组来比卖你自动装修拆箱带来的成本:IntArray,DoubleArray,CharArray...*/
fun main() {// 1 对比Java与Kotlin的数组
//    val objects:Array<Any> = Array<String>(4,{_-> "AA"})//Type mismatch.val objects: Array<Any> = Array<Any>(4, { _ -> "AA" })//Type mismatch.objects.forEach { println(it) }// Array相当于Java里面的ArrayList<xx>// 而IntArray DoubleArray CharArray等相当于Java里面的int [], double[], char[]等等// An array of ints. When targeting the JVM, instances of this class are represented as int[].val intArr = IntArray(4) { 0 }println("-------1 end-------")// 2 调用Java的方法val intArr2 = intArrayOf(1, 2, 3, 4)val myArray = MyArray()// 注意这里的需求类型是平台参数类型 args : IntArray!myArray.myArrayMethod(intArr2)println("-------2 end-------")// 3 使用下标访问数组更快捷val array = arrayOf(1, 2, 3, 4, 5)array[0] = array[0] * 2 // 使用下标访问数组 不会调用数组的get set方法 使得访问更快捷array.forEach { println(it) }println("-------3 end-------")// 4 调用Java的可变参数方法val myVarargs = MyArray()val stringArray = arrayOf("hello","world","hello world")myVarargs.myArrayMethod2(*stringArray)
}class D0508KotlinCallJava2 {}

Part3

知识点

1 调用Java异常的方法

2 打印Java Class

笔记

Java class

import java.io.IOException;public class MyException {public void myMethod() throws IOException{throw new IOException("I/O 异常");}// 可以看到在Java内部调用会抛出异常的Java方法 需要对异常进行处理public void callExceptionMethod(){try {this.myMethod();} catch (IOException e) {e.printStackTrace();}}
}

Kotlin class

fun main() {// 1 Kotlin调用Java 异常val exception = MyException()// 取消如下可以看到 调用Java的需要处理异常的方法 Kotlin不需要对异常进行处理// exception.myMethod()// 2 查看Java class类的2种方式println(MyException()::class.java)println(MyException().javaClass)
}class D0508KotlinCallJava3 {}

Kotlin学习笔记 第四章Kotlin调用Java相关推荐

  1. Kotlin学习笔记 第四章 Java调用Kotlin

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  2. Kotlin学习笔记 第四章注解

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  3. Kotlin学习笔记 第四章 解构声明 集合集合的扩展方法 Range 异常 Throw关键字

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  4. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  5. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  6. 《Go语言圣经》学习笔记 第四章 复合数据类型

    <Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...

  7. 计算机网络(第7版)谢希仁著 学习笔记 第四章网络层

    计算机网络(第7版)谢希仁著 学习笔记 第四章网络层 第四章 网络层 4.3划分子网和构造超网 p134 4.3.1划分子网 4.3.2使用子网时分组的转发 4.3.3无分类编址CIDR(构建超网) ...

  8. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  9. 机器人导论(第四版)学习笔记——第四章

    机器人导论(第四版)学习笔记--第四章 4.1 引言 4.2 解的存在性 4.3 当n<6时操作臂子空间的描述 4.4 代数解法和几何解法 4.5 简化成多项式的代数解法 4.6 三轴相交的Pi ...

最新文章

  1. Spring Web MVC(一)
  2. Google Brain与牛津大学主持最新《计算机视觉前沿》报告(146页PPT)
  3. Python学习笔记 - PostgreSQL的使用
  4. 摆地摊创业赚钱完全详细攻略
  5. jakarta_MicroProfile在Jakarta EE时代的作用
  6. 【杂谈】有三AI限量定制版书签来了,你准备好入手了吗?
  7. 全球及中国婴儿痤疮药行业消费需求调研与竞争策略展望报告2022版
  8. centos 7 No package python-dev available
  9. 用最简单的方法判断一个LONG整形的数A是2^n(2的n次方)
  10. Robotium双client測试框架
  11. 在哪里可以找水系图_虹吸雨水排水系统对比传统重力排水,好在哪里?
  12. Data - 大数据生态圈
  13. 随想录(关于论文投稿)
  14. 目标检测——夏侯南溪模型搭建篇(legacy)
  15. python全栈 操作系统
  16. State Processor API:如何读取,写入和修改 Flink 应用程序的状态
  17. tensorflow stack unstack操作
  18. 刘逖:ETF市场迎来发展时机 可从产品创新等方面推动
  19. vCenter资源池
  20. 区块链开发金融交易平台

热门文章

  1. 手机天气显示服务器错误,手机天气云服务器
  2. 浏览器安全检查己通过_Edge浏览器(Chromium)——从XSS到接管网页
  3. 数据结构----依据出栈顺序判断所需的最少栈空间
  4. 一,数据库基础,MySQL安装,配置文件,语法
  5. Ubuntu 出现 Invalid operation update 或 Invalid operation upgrade的解决办法
  6. 获取组织分类后群数据
  7. STM32CubeMX软件工程描述_USART配置过程
  8. FTP服务器常规操作
  9. Windows phone 7 之ToggleSwitch
  10. 【C Sharp笔记】2010年9月25日