2024年java版基础玩法

java版基础玩法在上一节中简单的给大家介绍了下 Kotlin 的特点 以及结合自己实际项目 中的使用来帮助大家了解这门语言 其实真的没你想象中的那么难 本文打算 介绍的是 Kotlin 中基础相关的一些语法 用法 有个大概印象即可 你写 kotlin 时遇到不会的点 回来这里查看即可 对了 差点忘了关于 kotlin 中很重要的一点 本节关键字一览 var 定义变量 val 定义常量 fun 定义方法

大家好,我是讯享网,很高兴认识大家。



      在上一节中简单的给大家介绍了下Kotlin的特点,以及结合自己实际项目
中的使用来帮助大家了解这门语言,其实真的没你想象中的那么难,本文打算
介绍的是Kotlin中基础相关的一些语法(用法),有个大概印象即可,你写kotlin
时遇到不会的点,回来这里查看即可!对了,差点忘了关于kotlin中很重要的一点:

本节关键字一览

  • var:定义变量
  • val:定义常量
  • fun:定义方法
  • Unit:默认方法返回值,类似于Java中的void,可以理解成返回没什么用的值
  • vararg:可变参数
  • $:字符串模板(取值)
  • 位运算符or(按位或),and(按位与),shl(有符号左移),shr(有符号右移),
    ushr(无符号右移),xor(按位异或),inv(按位取反)
  • in:在某个范围中
  • downTo:递减,循环时可用,每次减1
  • step:步长,循环时可用,设置每次循环的增加或减少的量
  • when:Kotlin中增强版的switch,可以匹配值,范围,类型与参数
  • is:判断类型用,类似于Java中的instanceof()

1.package打包与import导包


Kotlin中的packageimport与Java中的使用是一样的,不过kotlin中:

源文件可以不需要匹配目录和包,源文件可以放在任何文件目录!”

如果没有任何包声明的话,则当中的代码都属于默认包,导入时包名即为函数名
比如:import shortToast
而如果是在Java中,假如包名和包路径不相匹配,编译器是会报不匹配的错误的:

另外你还可以在导入类的时候为类设置一个别名,比如:

还有,kotlin中因为可以使用扩展方法,所以可以连class和interface都不写
直接在文件中写一堆fun方法!

而关于作用域,Kotlin中和Java是有些许不同的:

  • public:默认,总是可见
  • internal:同模块可见
  • private:声明范围与同模块的子作用域可见
  • protected:类似于private,但对子类也可见

注意:Java中不同包名没有任何直接关系!


2.常量与变量(val与var)

kotlin中使用val关键字来声明一个只读常量(final,不可修改,定义后,如果
后面修改值的话会报错的!),而使用var关键字来声明一个变量!

普通的写法:

你还可以连数据类型都不谢,因为Kotlin有:类型推断(Type inference) 的特性:
可以不指定数据类型,它会自动从后面的语句中推断出来!比如:

还有一点,val定义常量和var定义变量,默认都是private的,比如
定义:val a =123, var b = 321,打开生成的.class文件可以看到:

如图,private私有,且默认写了公有的getter和setter方法。


3.方法定义

kotlin中使用 fun 关键字来声明一个方法,先要说一个返回值:Unit
和Java中的void类似,表示的是:返回一个没有意义的值,默认,可以不写!
在方法名后面加一个(),如果需要传入参数可以写在这里!示例如下,

另外,如果是可变参数的话,可以使用 vararg 关键字修饰,只能一个个传值,
不能直接使用外部Array,除非使用 * 符号表示将Array中所有的元素都当做
参数处理!示例如下:

另外,Kotlin中的方法可以直接定义在文件中,而不需要依赖于任何的类,这个
称为扩展方法;而写在class或object中的方法则称成员方法;Kotlin中还有一种
特殊的方法:本地方法,定义在方法内部的方法,可以访问外部函数的私有成员!

对了,如果没有访问控制符修饰的fun默认是public final的!比如:


4.字符串

首先是字符串模板,就是支持用符号来取值,比如上面的pro方法中,

a和

b可以取得a和b对应的值,上面的代码其实还可以写得更简洁一些:

然后kotlin还支持字符串遍历


5.数据类型

Kotlin中使用接近于Java的方式(内置类型)来表示数字,但是又不完全相同,
比如没有隐式转换!Kotlin中数字相关的内置类型如下:

需要注意几点:

  • 1.没有自动向上转型,比如Int转Long,需要自己调toXxx方法转
  • 2.Long类型结尾必须为大写的L,不能为小写,比如1024L
  • 3.字符Char不是Number,用单引号来声明,比如'c',不能像Java一样直接拿来当数字使,
    如果你想把Char的值给Int,需要调toInt()方法
  • 4.Boolean的值为true或false
  • 5.Kotlin不支持8进制,十六进制0x开头,二进制0b开头
  • 6.位运算符,Java中的与或运算符用:|&,kotlin中使用orand关键字来替代
    其他运算符也有分别的关键字替代:shl(有符号左移),shr(有符号右移),ushr(无符号右移)
    xor(按位异或),inv(按位取反)

6.数组

Kotlin中使用 Array 类表示数组,需注意一点:[]访问数组元素在这里实际上是进行了操作符的
重载,调用的其实是Array类的getter和setter方法,但是编译成字节码的时候会进行优化,
变成直接访问数组的内存地址,所以并不会造成性能损失!

创建数组

  • 定长数组:val fixedSizeArray = arrayOfNulls<Int>(10)
  • 空数组: val empty = emptyArray<Int>()
  • 装箱操作:val arr = arrayOf(1, 2, 3) //还有其他比如IntArrayOf,BooleanArrayOf等
  • 闭包初始化
    ,结果输出:0

访问数组:使用[],如上~

遍历数组

根据下标遍历

indices代表下标!范围:(

0 <= indices < 数组size

)


7.流程控制

判断结构(条件表达式):

kotlin中if-else的使用与Java基本类似,而Java中有条件表达式这种东西:

而Kotlin面向表达式,写法如下:

你还可以直接把表达式写得很骚,比如:返回不同类型:

另外,表达式必须有值,如果else不返回东西的话,你需要引入Unit类:

还有一点,在if语句块的最后可以自动返回最后一行表达式的值,而不需要写return

循环结构

Kotlin中的while与do-while,break,continue与Java中的类似,不过Kotlin中多了个好玩的东西:
Ranages,包含与范围有关的函数操作符,使用示例如下:

  • 1.在范围内与不在范围内:
  • 2.判断某个字符串是否包含某两个字符串中的一个或多个:
  • 3.循环遍历的玩法:

前面数组遍历我们这样写:

,输出:

你也可以调lastIndex来获得最后的下标,写成if(i in 0..array.lastIndex)
如果你不想顺着遍历,想反过来遍历,可以利用downTo (递减)关键字,从最大值到最小值递减!

输出:

可能你还想隔着遍历,比如只遍历:10,7,4,1,可以用 step (步长)关键字!后面跟着的是步长,
比如你可以写成小数0.1这样也行,示例:

输出:10963

除此之外,其实还有一个倒序的方法:reversed(),比如下述代码:

输出:

增强版Switch(when语句)

when语句可以匹配类型值和范围还有参数,而且不用写break语句,非常可怕!

使用示例如下:

匹配值与范围

输出结果:A

匹配类型(只能匹配变量的类型,或else):

输出结果:是整型

匹配参数

:输出结果:else x= 92


8.异常

Kotlin中所有的Exception都继承了Throwable,含有一个message且未经检查。
这表示不会强迫我们在任何地方使用try/catch,而Java中如果某个方法抛出
了Exception,就需要用try-catch包围代码块!换一种说法:

Kotlin中没有检验异常!”

而抛出异常和try-catch-finally和Java中的类似!但是Kotlin中throw和try都是表达式
意味着他们可以赋值给某个变量,这一点在处理边界问题的时候很有用!

比如

java版基础玩法

,输出结果:


9.本节小结


本节对Kotlin中的一些基础知识进行了解读,包括导包打包常量变量方法定义
字符串数组流程控制异常这个八个常见的知识点,相信你对kotlin的掌握
又更进一步了,本来想把集合也放这一节的,考虑到集合的操作符比较多,
遂放到下一节,敬请期待~


本节参考文献如下

Kotlin官方文档
kotlin-for-android-developers-zh
Step into Kotlin


小讯
上一篇 2024-12-30 22:03
下一篇 2025-01-01 18:54

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/10446.html