kotlin第二讲 与 java对比
来源:互联网 发布:mysql引擎是什么 编辑:程序博客网 时间:2024/05/18 02:08
简介:上一篇介绍了整体开发环境的搭建和使用,本讲将进行一些kotlin与java的对比分析。
正文:首先来看一下,代码书写上的差别:(两个都是默认创建的,并没有改动)
package materialdesign.kotlinlearn;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(); i.setClass(this,Main2Activity.class); this.startActivity(i); }}
package materialdesign.kotlinlearnimport android.support.v7.app.AppCompatActivityimport android.os.Bundleclass Main2Activity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) }}
1.继承方式使用:代替了extends,class MainActivity:AppCompatActivity()一定要有(),否则就成了实现了
2.实现的方式使用了 : 代替了 implements ,class MainActivity:AppCompatActivity(), View.OnClickListener ,实现没有()
3.包名不需要和文件夹路径一致的,我们把Main2Activity的包名改到kotlinlearn,在引用出也改一下,不需要切换路径,就可以正常运行。
4.函数声明和返回放到后面(以下函数接受两个 Int
类型参数, 并返回 Int
类型结果:)
fun sum(a: Int, b: Int): Int { return a + b}5.void 返回使用 Unit 或 不写
fun printSum(a: Int, b: Int) { print(a + b)}
fun printSum(a: Int, b: Int): Unit { print(a + b)}
6.语句结尾也不需要 ; 了,怎么越看和groovy语言越像呢?
7.可以使用var来表示局部变量,不需要明确制定类型,(var 和 val)
一次性赋值 (只读) 的局部变量:val a: Int = 1val b = 1 // 变量类型自动推断为 `Int` 类型val c: Int // 没有初始化语句时, 必须明确指定类型c = 1 // 明确赋值
值可变的变量:var x = 5 // 变量类型自动推断为 `Int` 类型x += 1
8.字符串模版使用规则变化
var input = "abd" Log.v("XPC","100 "+input) //使用java的+拼接 Log.v("XPC","100 :${input}") //使用新的方式拼接
9.函数的使用方式替换,
一个函数可以这样
fun max(a: Int, b: Int): Int { if (a > b) { return a } else { return b }}也可以这样
fun max(a: Int, b: Int) = if (a > b) a else b有没有感觉像C的函数指针,看来kotlin是要集各家之所长于一身啊
10.增加了明确区分是否可以指向null的引用,规避了空指针异常的发生。
var a: String = "abc"a = null // 编译错误要允许 null 值, 我们可以将变量声明为可为 null 的字符串, 写作 String?:var b: String? = "abc"b = null // ok
fun getStringLength(obj: Any): Int? { if (obj is String) { // 在这个分支中, `obj` 的类型会被自动转换为 `String` return obj.length } // 在类型检查所影响的分支之外, `obj` 的类型仍然是 `Any` return null}
12.for循环 也有改变
fun main(args: Array<String>) { for (arg in args) { print(arg) } }或者for (i in args.indices) { print(args[i])}
13.switch case 可以使用when替换
fun cases(obj: Any) { when (obj) { 1 -> print("One") "Hello" -> print("Greeting") is Long -> print("Long") !is String -> print("Not a string") else -> print("Unknown") }}
14.范围比较
使用 in 运算符检查一个数值是否在某个范围之内:
if (x in 1..y-1) { print("OK")}
检查一个数值是否在某个范围之外:
if (x !in 0..array.lastIndex) { print("Out")}
在一个值范围内进行遍历迭代:
for (x in 1..5) { print(x)}
15.在集合内遍历
在一个集合上进行遍历迭代:
for (name in names) { println(name)}
使用 in 运算符检查一个集合是否包含某个对象:
if (text in names) { // 将会调用 names.contains(text) 方法 print("Yes")}
使用 Lambda 表达式, 对集合元素进行过滤和变换:
names .filter { it.startsWith("A") } .sortedBy { it } .map { it.toUpperCase() } .forEach { print(it) }
到此比较了一些常用的使用规则的区别,虽然有些差距但是差距不大,下面比较一下,java和kt编程成class之后的机器语言的区别。
将我们java中多余启动Activity的部分忽略掉,可以看到其他的部分都是一样的,
唯一不一样的地方是我们的kt文件是 public final 的,what?不能被继承了?
实际上,如果需要被继承,需要使用
open class Main2Activity : AppCompatActivity() {
这样就ok了阅读全文
0 0
- kotlin第二讲 与 java对比
- Kotlin笔记(二) : Kotlin与Java对比
- Kotlin escape与Java对比
- Java to Kotlin(java 与 Kotlin对比)
- Kotlin学习笔记(二):Kotlin与Java对比
- Kotlin学习笔记——与java对比
- Kotlin快速入门(1) -- 与Java的对比学习
- 第一讲与第二讲
- kotlin 和java 的对比
- java 第二讲
- Java学习,第二讲
- Java基础第二讲
- Java基础:第二十四讲 类与对象的关系
- Java基础:第二十四讲 类与对象的关系
- 第十二章 java流与文件操作 第二讲
- 第十二章 java流与文件操作 第二讲
- Kotlin对比Java之一:Any和Object
- 2.2 Kotlin的Hello Word程序与Java的Hello World的class文件对比
- MySQLdb 读取MySQL中的中文为????,活着是乱码的解决方案
- Android Context 上下文 你必须知道的一切
- Redis学习第一节
- Ibatis与MyBatis依赖共存有关问题
- 单元测试从Mockito到PowerMock再到Robolectric的详细解析
- kotlin第二讲 与 java对比
- g sensor porting
- Android——Activity
- python: 批量修改某路径下的文件名
- RHEL7密码重置
- JavaScript 新手的踩坑日记
- 利用caffe的solverstate在意外断电退出时继续训练
- 关于在VMware虚拟机上调整linux窗口的大小
- 多线程-NSThread