首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【错误记录】Kotlin 代码运行时报错 ( init 初始化调用还未初始化的成员属性 )

文章目录 一、报错信息 二、问题分析 三、解决方案 该问题的本质就是 , 成员属性 init 初始化代码块中进行初始化 , 但是初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常...Hello.kt:11) at HelloKt.main(Hello.kt) Process finished with exit code 1 上述代码在编译时 , 没有报错 ; 二、问题分析 ---- ...初始化 角度分析 上述代码的执行顺序 , Kotlin 类 对象实例化 时会执行一系列的 初始化操作 , 这些操作按照如下顺序执行 : 主构造函数 属性赋值 类的属性赋值 init 初始化的代码执行...再后 , 执行 init 初始化块 , 其中先执行 nameFirstLetter 函数 , 该函数调用了 fun nameFirstLetter() = name[0] 的 name 属性 ,...init 初始化代码块中进行初始化 , 但是初始化之前调用了该 成员属性 , 编译时没有报错信息 , 但是运行时会报异常 ; 三、解决方案 ---- 调换 初始化代码块 的代码顺序 , 先给 name

1.7K10

Kotlin IO

1.I/O介绍 这篇主要就是介绍Kotlin的I/O流的使用,相较于Java上的I/O使用,Kotlin要简洁不少。 I:Input 输入的意思。O:Output 输出的意思。...Kotlin,将数据的输入和输出操作称为流,这里的流是一组有序的数据序列,像河流一样流动的。 通常统称输入输出为I/O。 2. 字节与字符流 针对流的输入输出,根据数据的格式分为字节流和字符流。...Kotlin是基于Java的,所以Kotlin字节和字符流就是java的字节和字符流。 字节流列表: 所有Input和Output都是成对出现的,一个负责输出,一个负责输入。...两者是成对出现的,我们使用过程也是成对的进行 3. 基础函数 从上面的表格,可以得出有很多的输入输出,那么我们实际使用过程哪里进行入手呢?基类进行入手。...Kotlin针对这两个基础抽象类进行了不少的封装,可以方便我们快速使用。相关封装在kotlin.io.ByteStreamsKt.class可以看到。 针对上面的函数进行简单的说明一下。

26720
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin入门(27)文件读写操作

另外像图片等二进制格式的文件,可通过字节数组的形式写入文件,Kotlin提供了writeBytes方法用于覆盖写入字节数组,也提供了appendBytes方法用于追加字节数组。...这几个方法理解起来毫不费力,文件读取全部的文本,也只要下面一行代码便成:     //读取文件的文本内容     val content = File(file_path).readText() 若想从图片文件读取位图信息...该办法确实可行,因为Android的位图工厂BitmapFactory刚好提供了decodeByteArray函数,用于字节数组解析位图,具体代码如下所示:     //方式一:利用字节数组读取位图...    //readBytes读取字节数组形式的文件内容     val bytes = File(file_path).readBytes()     //decodeByteArray字节数组解析图片...获取文件的输入流对象     val fis = File(file_path).inputStream()     //decodeStream入流解析图片     val bitmap = BitmapFactory.decodeStream

3.3K20

一切皆是文件:UNIX,Linux 操作系統的設計哲學

用户空间装着用户进程需要使用的资源,比如你程序代码里开一个数组,这个数组肯定存在用户空间;内核空间存放内核进程需要加载的系统资源,这一些资源一般是不允许用户访问的。...使用Kotlin 让 Java程序员们的生活变得更好,Java的那些空指针错误,浪费时间的冗长的样板代码,啰嗦的语法限制等等,Kotlin中统统消失。... JVM 生态不断发展繁荣的过程,也诞生了Scala、Groovy、Clojure 等兄弟语言。 Kotlin 也正是 JVM 家族的优秀一员。...5.默认和命名参数 Kotlin,您可以为函数的参数设置一个默认值,并给每个参数一个名称。这有助于编写易读的代码。...图来自《Kotlin入门到进阶实战》 (陈光剑,清华大学出版社) ? 图来自《Kotlin入门到进阶实战》 (陈光剑,清华大学出版社) ? https://kotlinlang.org/

96730

JAVA面试基础「建议收藏」

Input 输入流(将外部文件读入到 Java 程序)   Output 输出流(将 Java 程序的数据输出到外部)   Java 的流有很多种不同的分类。...InputStream 的常用方法 方法 描述 int read() 以字节为单位读取数据 int read(byte b[]) 将数据存入 byte 类型的数组,返回数组中有效数据的长度 int read...可以使用缓冲流,缓冲流自带缓冲区,可以一次性硬盘读取部分数据存入缓冲区,再写入内存,这样就可以有效减少对硬盘的直接访问。 缓冲流属于处理流,如何来区分节点流和处理流?   ...序列化和反序列化 序列化就是将内存的对象输出到硬盘⽂件中保存。 反序列化就是相反的操作,⽂件读取数据并还原成内存的对 象。...序列化就是将内存的对象输出到硬盘文件中保存。 反序列化就是相反的操作,文件读取数据并还原成内存的对象。

94820

C语言:文件操作详解

所以C程序针对⽂件、画面、键盘等的数据⼊输出操作都是通过流操作的。      ⼀般情况下,我们要想向流⾥写数据,或者读取数据,都是要打开流,然后操作。  ...因为C语言程序启动的时候,默认打开了3个流: • stdin - 标准⼊流,⼤多数的环境键盘⼊,scanf函数就是标准⼊流读取数据。...5.4 fgets char * str:传字符串存放的地址(一般是一个字符数组) int num:传读取的最大字符串长度(由于字符串末尾有一个\0,所以默认其实最多读取num-1个) FILE...* stream:传需要读取的流 Get string from stream:作用是获取字符串 我们可以看到,由于字符串的末尾要默认跟一个\0,所以最多只能读取num-1个到arr数组 5.5...,键盘上读取,而fscanf是所有的标准输入流都可以,参数可以传文件流也可以跟scanf一样传stdin(标准输入流),而sscanf是从一个字符串读取。

42810

java学习笔记(基础篇)—IO流

一:流的概念 Java,把一组有序的数据序列称为流。 如a.txt的文件拷贝到b.txtJava中流是使用统一的方式操作输入和输出的数据。 文件读取,键盘读取,网络读取......如果遇到输入流的结尾,则返回-1; b)int read(byte[] b): 入流读取若干个字节,把它们保存到参数b指定的字节数组。返回的整数表示读取的字节数。...如果遇到输入流的结尾,则返回-1; c)int read(byte[] b, int off, int len): 入流读取若干个字节,把它们保存到参数b指定的字节数组。...int available(): 返回可以入流读取的字节数目; skip(long): 入流跳过参数n指定数目的字节。...类提供了一系列和写数据有关的方法: write(): 向输出流写入数据:有三种重载形式: a)void write(int b):向输出流写入一个字节; b)void write(byte[] b): 把参数b指定的字节数组的所有字节写到

93610

java学习笔记(基础篇)—IO流

一:流的概念 Java,把一组有序的数据序列称为流。 ​ 如a.txt的文件拷贝到b.txtJava中流是使用统一的方式操作输入和输出的数据。...如果遇到输入流的结尾,则返回-1; b)int read(byte[] b): 入流读取若干个字节,把它们保存到参数b指定的字节数组。返回的整数表示读取的字节数。...如果遇到输入流的结尾,则返回-1; c)int read(byte[] b, int off, int len): 入流读取若干个字节,把它们保存到参数b指定的字节数组。...int available(): 返回可以入流读取的字节数目; skip(long): 入流跳过参数n指定数目的字节。...类提供了一系列和写数据有关的方法: write(): 向输出流写入数据:有三种重载形式: a)void write(int b):向输出流写入一个字节; b)void write(byte[] b): 把参数b指定的字节数组的所有字节写到

81510

什么是IO流_io流实现

那么JAVA的IO流呢; (1).java,java就是自来水厂,水源地就是源,家就是目的 (2)....//对于自来水厂当做参照物来说,水源地流到我自来水厂的水,是外面进来的,那么水是输入进来的。(输入) 自来水厂到家的水,是自来水厂流出的(输出)。...对于java程序来说,也是一样的,源地到我java的流,便是输入流(InputStream),而我java中流出的便是输出流(OutputStream) (3).那么你已经知道什么是输入流(InputStream...我们知道储水池有很多种类型的,那么java的缓冲区自然也有很多种类型的,例如以下最常用的 我们已经知道的InputStream是输入流,那么BufferedInputStream就是输入流的缓冲区了...创建转换流对象 出流对象, 输出的编码 OutputStreamWriter osw = new OutputStreamWriter(os,“ISO-8859-1”); 以上就是IO流的简单介绍

67030

Kotlin 1.2 新特性

跨平台 跨平台项目是 Kotlin 1.2 的一个新的实验性功能,它允许开发者相同的代码库构建应用程序的多个层——后端、前端和Android应用程序,在这个跨平台方案,主要包含三个模块。...Kotlin1.2版本,使用lateinit修饰符能够用于全局变量和局部变量了,也就是说,二者都允许延迟初始化。...弃用:枚举条目中的嵌套类型 枚举条目中,inner class由于初始化逻辑的问题,定义一个非嵌套的类型已经被弃用了。这会在Kotlin 1.2引起警告,并将在Kotlin 1.3出错。...弃用:vararg单个命名参数 为了与注释数组文字保持一致,命名形式(foo(items = i))传递可变参数的单个项目已被弃用。请使用具有相应数组工厂功能的扩展运算符。...为确保与新模块系统的兼容性,Kotlin做出的另一个更改是将kotlin.reflectkotlin-reflect库移除。

1.7K100

Java IO学习笔记+代码(3)

* public void write(char[] cbuf, int off, int len) throws IOException  * 将字符数组cbuf索引off处开始的len个字符写入输出流...* public String readLine() throws IOException  * 用于入流读取一行字符。  ...java.io包,  * FilterInputStream和FilterOutputStream类是所有过滤输入流和  * 输出流的父类,它们是抽象类,本身不能生成任何实例,在这两上类  * 之下...,分别实现了几物特殊的过滤输入流和输出流,利用这些特殊  * 入流和输出流的实例可以进行流处理。  ...代码块对上面这些对象进行初始化,程序的目的是通过BufferedInputStream      * 类对象bufInObj和BufferedOutputStream类对象bufOutObj将secondFile.txt

58710

Kotlin 1.2 的新增特性

其他语言特性 注解数组常量 Kotlin 1.2 开始,注解的数组参数可以使用新的数组常量语法而不是 arrayOf 函数来传递: 数组常量语法被限制为注释参数。...目标平台:运行 Kotlin 1.2.0 版本的 JVM 检查一个 lateinit 变量是否被初始化 现在可以属性引用上使用 isInitialized 来检查 lateinit 变量是否已经被初始化...弃用:枚举项的嵌套类型 枚举项,由于初始化逻辑的问题,定义一个不是内部类的嵌套类型的功能已经被弃用。 Kotlin 1.2 这将会引起警告,并将在 Kotlin 1.3 中报错。...弃用:vararg 的单命名参数 为了与注解数组常量保持一致,命名的表单(foo(items = i)) 为 vararg 参数传递的单项目已被弃用。...这可能会影响应用程序的整体性能;仅在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。 “手工”的解决方法是将控制流的子表达式的值存储变量,而不是直接在调用参数对它们进行求值。

2.8K70

Kotlin 1.2 的新增了哪些特性?

其他语言特性 注解数组常量 Kotlin 1.2 开始,注解的数组参数可以使用新的数组常量语法而不是 arrayOf 函数来传递: ? 数组常量语法被限制为注释参数。...目标平台:运行 Kotlin 1.2.0 版本的 JVM 检查一个 lateinit 变量是否被初始化 现在可以属性引用上使用 isInitialized 来检查 lateinit 变量是否已经被初始化...弃用:枚举项的嵌套类型 枚举项,由于初始化逻辑的问题,定义一个不是内部类的嵌套类型的功能已经被弃用。 Kotlin 1.2 这将会引起警告,并将在 Kotlin 1.3 中报错。...弃用:vararg 的单命名参数 为了与注解数组常量保持一致,命名的表单(foo(items = i)) 为 vararg 参数传递的单项目已被弃用。...确保与新模块系统兼容的另一个更改是 kotlin-reflect 库移除 kotlin.reflect 包的弃用声明。

2.8K10

【剑指offer:排序数组查找数字】搜索左右边界:两边向中间、二分查找

题目描述:统计一个数字排序数组中出现的次数。 这题要解决的核心问题就是:搜索数字出现的左右边界。边界的差值,就是出现次数。...解法 1: 两边向中间 思路比较简单: 数组左侧向右遍历,遇到目标数字 target,停止,记录下标 left 数组右侧向左遍历,遇到目标数字 target,停止,记录下标 right 如果 right...解法 2: 二分查找(巧妙) 二分查找一般用来查找数字在有序数组是否出现过。进一步想,它可以用来不断子序列搜索对应数字。...所以,我们就可以用它来向左边子序列不断搜索,确认左边界;同样的思路,确认右边界。 这可能还是有点抽象,举个 ?。以数组 2、3、3、3、2 为例,我们要搜索数字 3 的左右边界。

1.5K20

Java 字节流 字符流 io流

,输入也叫读取数据,输出也叫写出数据 1.1 IO的分类 按照数据的流向分类:输入流与输出流 输出流:把数据其他设备读取到内存的流 输出流:把数据内存写出到其他设备上的流 格式数据的类型分...public void write(byte[] b, int off, int len) :指定的字节数组写入 len字节,偏移量 off开始 出到此输出流。...public int read(byte[] b) : 入流读取一些字节数,并将它们存储到字节数组 b 。...java.io.FileInputStream 类是文件输入流文件读取字节。...public int read() : 入流读取一个字符。 public int read(char[] cbuf) : 入流读取一些字符,并将它们存储到字符数组 cbuf

90310

C语言-文件操作

这时候就涉及到了上文所讲述的数据文件的存储方式,将内容简化为文字就是下图所示(以10000为例): 当放入10000时实际上放入的是10011100010000这个二进制序列,二进制文件显示的是十六进制的数字序列...以上就是关于运行代码VS的二进制文件的相关知识。 3....3.1.2 标准流 C语言中,标准库提供了一组预定义的流,称为标准流(standard streams),它们包括标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。...标准输入流(stdin):标准输入流用于程序外部读取数据,通常与键盘输入相关联。当你使用scanf等函数读取用户输入时,实际上是标准输入流读取数据。...函数 所有⼊流 fputc 字符输出函数 所有输出流 fgets ⽂本⾏⼊函数 所有⼊流 fputs ⽂本⾏输出函数 所有输出流 fscanf 格式化⼊函数 所有⼊流 fprintf 格式化输出函数

7510
领券