Android学习笔记3 - Kotlin语法学习

Android快速转战Kotlin教程 前言 kotlin是啥?这里就不用多说了,想必看这篇文章的童鞋肯定是有所了解的。 那么这篇文章你可以收获什么? 答:本文主要通过本人如何从java转战到kotlin并应用在实际项目中的个人经历,给大家提供一些学习思路、学习方法以及一些学习资料和个人总结。 前提:你的项目(包含个人项目)即将开始用到kotlin(没有项目作为依托你会缺少十足的动力,而且缺少应用场景乘热打铁那也是白学) 建议:建议... 阅读详情

Kotilin是官方推荐的第一语言,所以本章大概记录一下他和别的语言的区别和特点。

运行环境

Kotilin可以使用InterliJIDEA,是JetBrains的期间IDE来运行。或者使用try.lotilinlang.org在线运行。我比较懒还是在AS上运行就可以了。

第一次写Kotilin代码

我们还是在上一节的HelloWorld里写代码运行吧。我们在MainActivity位置,鼠标右键添加Kotilin File/Class,我们建立一个.kt的文件,我这里取名Comm.kt
在这里插入图片描述

我写入代码如下:

package com.example.helloworld
import android.util.Log
fun main(){
    println("main run");
    Log.d("first","main run");
}

增加了main函数,你会发现函数前面出现一个运行的绿色箭头,如下图
在这里插入图片描述

点击箭头就可以运行程序了
在这里插入图片描述
我们在输出窗口Run里可以看到运行结果,println输出了main run,而Log函数报错了,因为我们运行的这段Kotlin代码和Android无关。这就是在AS里单独运行Kotlin的方法,后面都按照这个来进行。

上一章和本章的代码我都加了分号,Kotilin是不用加分号的,可能C#写习惯了。

变量声明

val abc = 10	//val是不可变的的变量
var abc = 10	//var是可变变量
val abc : Int = 10	// 显示声明了变量类型

函数声明

import kotlin.math.max


fun main(){
    println("main run")
    //Log.d("first","main run")
    println("max : "+methodName(1,2))
    println("max2 : "+methodName(3,4))
}
//一般的书写
fun methodName(param1 : Int, param2 : Int) : Int
{
    return max(param1,param2)
}

//特殊的书写
fun methodName2(param1 : Int, param2 : Int) = kotlin.math.max(param1,param2)

max引用了math库,可以鼠标悬浮在max上,点击导入。

条件

	//普通用法
    if(2>1)
    {
        println(" > ")
    }
    else
    {
        println(" < ")
    }

    //if可以赋值
    var abc = if(2>1) 2 else 1
    println("abc :"+abc)

    //if赋值可以直接给函数当返回值
    println("methodName3 :"+methodName3(5,6))

	fun methodName3(param1 : Int, param2 : Int) = if(param1>param2) 2 else 1

when

这里我们还是写一个特殊的写法。

println("abc :"+methodName4("Li"))

fun methodName4(name:String) = when(name)
{
    "Liu" -> 88
    "Mao" -> 78
    "Li" -> 99
    else -> 0
}

循环

	//循环从0到10(包含10)11个
    for(i in 0..10)
    {
        println("for1:"+i)
    }

    //循环0到10,不包含10
    val count = 0 until 10  //0-9
    for(i in count)
    {
        println("for2:"+i)
    }

    //每次加2
    for(i in count step 2)
    {
        println("for3:"+i)
    }

    //降序(从10到0)11个
    for(i in 10 downTo 0)
    {
        println("for4:"+i)
    }

执行结果

for1:0
for1:1
for1:2
for1:3
for1:4
for1:5
for1:6
for1:7
for1:8
for1:9
for1:10
for2:0
for2:1
for2:2
for2:3
for2:4
for2:5
for2:6
for2:7
for2:8
for2:9
for3:0
for3:2
for3:4
for3:6
for3:8
for4:10
for4:9
for4:8
for4:7
for4:6
for4:5
for4:4
for4:3
for4:2
for4:1
for4:0


类的使用

基本使用

	class FirstRun {
    var name = ""   //必须初始化
    fun run()
    {
        println("run : "+name)
    }
}

调用缺少了new关键字,调用构造函数表示new

	val obj = FirstRun()
    obj.name = "Jason"
    obj.run()

继承

被继承的类要加open关键字,类似于val一样,继承可以传递主构造函数的参数。

package com.example.helloworld

open class FirstRun(val nm:String) 
{
    var name = ""   //必须初始化
    init //init这里是主构造函数
    {
        name = nm
    }
    open fun run()
    {
        println("run : "+name)
    }
}

//这里继承了父类,并且传入了构造函数的参数nm,注意nm不用加val。
class SecRun(val _t:Int,nm:String) : FirstRun(nm)
{
    var t = 0//必须初始化
    init
    {
        t = _t
    }
    override fun run()  //override的父类函数必须要加open关键字
    {
        super.run()
        println("run : "+name+",t:"+t)
    }
}
	val obj = SecRun(10 , "Jason")

    obj.run()

运行结果:
run : Jason
run : Jason,t:10

次构造函数

constructor

package com.example.helloworld

open class FirstRun(val nm:String)
{
    var name = ""   //必须初始化
    init //init这里是主构造函数
    {
        name = nm
    }
    open fun run()
    {
        println("run : "+name)
    }
}

//这里继承了父类,并且传入了构造函数的参数nm,注意nm不用加val。
class SecRun(val _t:Int,nm:String) : FirstRun(nm)
{
    var t = 0//必须初始化
    init //init这里是主构造函数
    {
        t = _t
        name = nm
    }
    constructor(nm:String) : this(
        0,nm
    )
    constructor() : this(
        0,""
    )
    override fun run()  //override的父类函数必须要加open关键字
    {
        println("run : "+name+",t:"+t)
    }
}

fun main(){
    val obj1 = SecRun()
    val obj2 = SecRun("Jason")
    var obj3 = SecRun(3,"Jason")
    obj1.run()
    obj2.run()
    obj3.run()
}


运行结果:
run : ,t:0
run : Jason,t:0
run : Jason,t:3
这样增加了两种次构造函数,这样就可以通过三种方式来构造函数了。

接口

class FirstRun() : Walk
{
    var name = "Jason"   //必须初始化
    fun run()
    {
        println("run : "+name)
    }
    override fun walk1() {
        println("walk1 : "+name)
    }
}


interface Walk
{
    fun walk1()
    fun walk2(){ println("walk2") } //默认实现
}

	fun main(){
    val obj1 = FirstRun()

    obj1.walk1()
    obj1.walk2()

}

接口Walk两个实现,walk2有默认实现,walk1没有,所以必须要写walk1的实现。

函数修饰符

  • public(所有类可见,默认没有写就是public)
  • private (私有本函数)
  • protected(当前类和子类)
  • internal(模块内部调用)

数据类

数据类定义很简单

data class phone(val brand:String,val price:Int)

上面定义了一个手机,有品牌和价格。

	fun main(){
    val phone1 = phone("MI13",2888)
    val phone2 = phone("MI13",2888)
    println(phone1)
    println("phone1 == phone2 ? "+(phone1 == phone2))
}

输出结果:
phone(brand=MI13, price=2888)
phone1 == phone2 ? true

单例类

一般全局只希望有一个实例化的某个类会使用单例类,其他语言需要用static 关键字定义instance来调用。Kotlin更简单。

object SingleClass
{
    fun Do(){ println("do") }
}

fun main(){
    SingleClass.Do()
}

只用添加object就可以了,看上去好像是静态的,其实Kotlin内部创建了一个单例。

拉姆达

下面是几个Kotlin的Lambda用法。

  • 集合创建法
package com.example.helloworld

import android.util.Log
import kotlin.math.max


fun main(){

    val lista = listOf(1,2,3,2,"a","b")    //创建不可变集合
    for (one in lista)
    {
        println(one)
    }
    println("------华丽的分割线-------")
    val listb = setOf(1,2,3,2,"a","b")    //创建不可变,不可重复集合
    for (one in listb)
    {
        println(one)
    }
    println("------华丽的分割线-------")
    val listc = mutableListOf(1,2,3,"a","b")    //可变集合
    listc.add("c")
    for (one in listc)
    {
        println(one)
    }
    println("------华丽的分割线-------")
    val mapa = mapOf("Mi" to 1,"Apple" to 2,3 to 3) //类似字典类型, mutableMapOf对应是可变的
    for (one in mapa)
    {
        println(one)
    }
    
}

运行结果

1
2
3
2
a
b
------华丽的分割线-------
1
2
3
a
b
------华丽的分割线-------
1
2
3
a
b
c
------华丽的分割线-------
Mi=1
Apple=2
3=3


  • 拉姆达函数用法
    { 参数1:参数类型,参数2:参数类型 -> 函数体 }
fun main(){

    val lista = listOf("Apple",  "Banana" , "Orange" ,"Pineapple")    //创建不可变集合
    val x1 = lista.maxOf() { it.length  }
    println(x1)

    val x2 = lista.filter { it.length > 5 }.map { it.uppercase() }
    println(x2)
}

结果
9
[BANANA, ORANGE, PINEAPPLE]

Java函数的使用

假设有Java接口

public interface Runnable {
	void run();
}

Kotlin调用

Thread(object : Runnable {
	override fun run() {
	println("running")
	}
}).start();

我们创建了一个Runnable接口的匿名类示例,并调用。
这个Lambda是单参数,还可以简化成:

Thread {	println("running")	}.start()

Kotlin可能会经常调用Java接口,例如常用的。

button.setOnClickListener{}

空指针检查

fun doit (firstrun :FirstRun?)
{
	if( firstrun != null)
	{
		firstrun.run()
	}
}

一般Kotlin一般不允许有空,一般变量都有默认值,如果非要传递空,需要添加问号

判空辅助工具

  • 操作符:?.
if(abc != null) abc.run()
可以写作
abc?.run()
  • 操作符:?:
val c = a?:b
//如果a不是null,c=a,否则c=b
  • 操作符:!!

var myname : String? = null
fun main(){
    myname = "Jason"
    run()
}
fun run()
{
    val str = myname!!.uppercase()
    println(str)
}

因为myname是可能为空的,如果run函数里没有!!,编译器会不让通过的,因为可能有风险某人直接调用run函数导致问题。所以!!操作符就好像你给编译器说,我保证这里没问题,绝对不会为空。这就是一个潜在的风险。

把上面的函数写成这样都是编译器不能通过的。

fun run()
{
    if(myname != null)
    {
        val str = myname.uppercase()
        println(str)
    }
}

let函数

class Walk
{
    fun run1(){}
    fun run2(){}
    fun run3(){}
}

fun main(){
    val wk = Walk()
    doWalk(wk)
}
fun doWalk(wk:Walk?)
{
    wk?.run1()
    wk?.run2()
    wk?.run3()
}


这个doWalk函数里进行了3次?.操作,相当于判断了3次是否为空,这里可以用let函数替换。

fun doWalk(wk:Walk?)
{
    wk?.let { work ->
        work.run1()
        work.run2()
        work.run3()
    }
}

小技巧

字符串

	val who : String ="Jason"
    println("hello : ${who} , byebye !")

hello : Jason , byebye !

默认参数

函数可以默认参数,甚至不用是最后几个有默认值,我们可以采用键值的放置传入函数,如下:

fun main(){
    run(p3 = 2.5f, p2 = 90)
}

fun run(p1:String = "Jason",p2:Int,p3:Float=1.7f)
{
    println(p1)
    println(p2)
    println(p3)
}

Jason
90
2.5

语法学习先到这里有个大概的了解,剩下的在工作和学习种再慢慢积累吧。

参考
《第一行代码》Android第三版

Kotlin or Java?(简单聊聊Kotilin) Kotlin or Java? 结论放前面。根据个人的一些了解和受限于经验和眼界,个人认为kotlin是一门非常有潜力的语言,语法糖真的甜,也可实现和Java的混编。Kotlin Native的实现,可以让Kotlin不单单可以通过运行在JVM上实现跨平台,更可以直接生成对应平台上的二进制可执行文件实现跨平台。 在移动端开发领域,Kotlin Native实现了同一份代码既可以在Android平台也可以在IOS平台上运行。而且Kotlin在被Google官宣作为Android的一级开发语言后,在移动端Ko 阅读详情

相关推荐

Kotlin语言的学习路线

学习Kotlin是一段令人兴奋的旅程,通过持续的实践与探索,你将掌握这门强大的语言。欢迎利用网络资源、开源项目和社区互动,不断提高自己的技能。希望本文提供的学习路线能够帮助你在Kotlin语言的学习中建立清晰的方向,成为一名优秀的Kotlin开发者。

2401_89841069的博客 1732

Kotlin入门学习(非常详细),从零基础入门到精通,看完这一篇就够了

和Java中的接口定义类似。

Javachichi的博客 6万+

安卓入门二 Kotlin基础

但大佬们的思维就比较活跃,因为开发过程中关注的一个 DOM/ View 的属性是很少的,所以就创造了一个轻量级的数据结构来表示一个 DOM/View 节点,由于数据结构比较轻量,那么销毁创建就可以随意点。如果我们频繁的变更状态,那就会频繁的触发 Recomposition,如果每次还是重新生成一个巨大的 Virtual DOM 树,那框架内部的 diff 就会非常耗时,那么性能问题随之就来了,这是很多同学用 Compose 写出的代码卡顿的原因。选择任意一个日期,可以发现弹出的toast是!

weixin_52735932的博客 1243

Kotlin学习笔记——Kotlin基础

Kotlin学习手记——基本类型、变量、集合、数组、区间、函数声明

川峰的博客 6168

以太网物理层协议整理(2)-万兆以太网

在万兆以太网标准化过程中,IEEE和10GEA(万兆以太网联盟)是两个最重要的组织。 万兆以太网标准和规范都比较繁多,在标准方面,首先有2002年的IEEE 802.3ae,后来也不断有新的万兆以太网规范推出,如2006年的IEEE 802.3an标准(10GBase-T)就推出了基于双绞铜线的万兆以太网规范,同样的IEEE 802.3aq标准推出了基于光纤的10GBase-LRM;2007年的

NowOrNever 3万+

基于ThingsBoard+ESP8266的MQTT远程控制实战:从设备接入到仪表盘交互

本文详细介绍了基于开源物联网平台ThingsBoard与ESP8266开发板,通过MQTT协议实现远程控制的完整实战流程。从环境搭建、设备创建、仪表盘设计到核心代码编写与联调,手把手指导完成从云端到硬端的物联网闭环,为智能家居与物联网原型开发提供低成本、高效率的解决方案。

weixin_29192365的博客 330

Kotlin第一弹:Kotlin详细介绍

Kotlin是一门用于现代多平台应用的静态编程语言,其中被广泛用于Android 平台的开发,被称之为Android世界的Swift。它由大名鼎鼎的JetBrains 公司设计开发并开源,著名的IDE工具就是他们的产品,所以无疑他们是对编程语言设计领域最为熟悉的专家。Kotlin从2016年发布1.0的release版本开始至今,使用的开发者数量快速增长。此外Kotlin已经拥有强大的生态和社区开发者的支持:•Kotlin是著名的IDE厂商JetBrains。

m0_58941767的博客 8599

STM32无线遥控小车的设计

基于SPI通信的无线摇杆小车的设计

weixin_69414084的博客 2926

安卓工程师跳槽经验分享,最强技术实现

前言 不知道有多少人和我一样是年前辞职,结果赶上了疫情,在家里一呆就是几个月! 但塞翁失马,焉知非福!我本来就打算年后找工作,正好趁着这段时间,历时3个月,整理了这份可能是市面上最全面的安卓面试题解析大全! 从基础到架构进阶,包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中高级安卓技术点。 文章中所列主要为大纲部分,详细内容可以在文末自行获取哈! 如果你熟练掌握本文中列出的知识点,相信将会大大增加你通过前两轮技术面试的几率!这些内容都供大家

174

超详细版!Obsidian+Claude+Skills+云同步,打造智能 AI 知识库

本文介绍如何搭建高效的AI知识管理系统,将Obsidian笔记工具与ClaudeAI助手深度整合。通过ClaudeCode安装配置、ObsidianSkills插件添加和坚果云同步设置,实现本地存储安全性与云端便捷性的完美结合。该系统支持智能笔记整理、知识图谱可视化、智能搜索问答和内容创作辅助等功能,使静态笔记转变为能自动分析关联、处理复杂结构的"活"知识库。详细步骤包括工具准备、环境配置、插件安装和云同步设置

2301_79998006的博客 1078

Spring AI Alibaba Graph进阶:如何用图算法优化你的推荐系统?

本文深入探讨了如何利用Spring AI Alibaba Graph的图算法优化推荐系统。通过分析用户行为数据的网络化特征,结合加权随机游走和社区发现算法,显著提升推荐精准度和用户点击率。文章还分享了混合推荐架构设计、性能优化技巧及生产环境中的实战经验,为开发者提供了一套完整的图算法推荐解决方案。

weixin_33738555的博客 127

【精华】安卓开发学习路线规划

  近一段时间经常被朋友问到如何从零开始学习安卓,成为一名安卓开发工程师。不得不感叹,现在各行各业都有不少人在涌向IT/互联网行业,希望从事程序开发工作,竞争越来越激烈了。借此机会,我梳理了一下自己所学所知的安卓知识,制定了这份安卓开发学习路线规划,希望能帮助到有志于安卓开发的伙伴能尽快找到学习的方向,进入安卓开发的大门! 一、安卓开发学习路线   安卓开发可以从深度和广度两个维度进行学习。大方向上看,Android在向诸如Flutter这样的跨平台技术演进,混合式开发、大前端等正成为移动端的发展方向和热门

time-space的博客 2万+

超越界面设计:GUI Guider与LVGL在STM32F103上的系统集成与架构思考

本文探讨了GUI Guider与LVGL在STM32F103微控制器上的系统集成与架构设计,重点分析了工程模块化组织、内存管理优化、硬件驱动接口设计以及FreeRTOS多任务集成。针对STM32F103ZET6的资源限制,提供了实用的移植策略和性能优化方案,帮助开发者构建高效、可维护的嵌入式GUI系统。

j2k3l4的博客 921

Android开发语言——Kotlin学习笔记

Kotlin 本Blog是我学习《Android第一行代码-第三版》的学习笔记,将会不定期断更持续更新。(默认大家都和我一样学过C++或Java的基础语法)。 Kotlin简介 在Android诞生的前几年中,Java一直是Android的主要开发语言。在2017年,Google在I/O大会上宣布,Kotlin正式成为Android的一级开发语言,与Java平起平坐,同时Android Studio也对Kotlin进行了全面的支持。 2019年,Google在I/O大会上宣布,Kotlin已成为Androi

l_red_forest的博客 1473

YOLO26改进策略【卷积层】| HWD,引入`Haar小波变换`到下采样模块中,减少信息丢失

本文记录的是。传统的卷积神经网络中常用的最大池化平均池化和步长为2的卷积等操作进行下采样可能会导致信息丢失,为了解决信息丢失问题,HWD作者受无损信息变换方法的启发,引入Haar小波变换到下采样模块中,

Limiiiing的博客 344

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 400

Kotlin语法学习笔记

文章目录Kotlin学习笔记写在前面Kotlin 基础语法变量变量声明数据类型字符串内嵌表达式数组函数函数声明函数调用逻辑控制if语句when语句while语句for语句标准函数扩展函数高阶函数内联函数运算符重载静态方法infix函数几种方法面向对象继承与构造函数接口可见性修饰符数据类单例类密封类泛型和委托泛型类泛型方法类委托委托属性Lambda编程集合的创建与遍历集合的函数式API集合中常用的函数式API总结空指针检查并发线程协程Kotlin语法糖参考资料 Kotlin学习笔记 写在前面 关于Kotlin

柷敔的博客 1283

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

kotlin学习-学习大纲

【代码】kotlin学习-学习大纲。

weixin_39743452的博客 1207

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

kotlin学习笔记之一:基础语法

年前看boss直聘,很多安卓开发岗位需要熟练kotlin开发,为了年后找工作和以后开发效率提升,春节假期开始了kotlin的学习,主要教材是《Kotlin 实战》kotlin in action这本书,这几天有时间顺便把阅读笔记整理下,这里是前三章内容的回忆和笔记整理。 1、kotlin代码在java中访问:文件名+Kt.fun名称,文件名可以通过注解指定名称:@file:JvmNam...

weixin_34327761的博客 156

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android kotlin学习

摘要:本文介绍了Kotlin在Android开发中的学习路径,从基础语法到进阶应用。主要内容包括:1) Kotlin基础(变量、函数、空安全等);2) Android开发基础(Activity、布局、事件等);3) MVVM架构与Jetpack组件;4) 协程异步编程;5) Jetpack Compose UI开发。同时推荐了官方文档、中文资源和学习建议,强调项目实践的重要性。适合不同基础的开发者系统学习Kotlin Android开发。

自我记录贴 1401

最全Android Kotlin 学习路线(Kotlin 从入门、进阶到实战)

Kotlin 是由 jetBrains 开发的一门现代多平台应用的静态编程语言,Kotlin 代码即可以编译成 Java 字节码,又可以编译成 JavaScript,Kotlin 是开源的,源码在这。Kotlin 包含了大量的语法糖,在编码的时候,会大大的简化我们的代码量及工作效率。且相比传统的 Java 语言,Kotlin 种大量的简写,可以减少很多用Java 必须要写的样板代码,减少大量的 if…else 等嵌套,减少大量接口的实现,代码结构也会更加清晰。

Eqiqi的博客 5866

【安卓学习之开发工具】please update kotlin plugin

█ 【安卓学习之开发工具】please update kotlin plugin █ 系列文章目录 提示:这里是收集了安卓学习之常见问题的相关文章 【安卓学习之开发工具】 Android Studio学习 1 - 入门篇 【安卓学习之开发工具】 Android Studio学习 2 - 遇到的问题 【安卓学习之开发工具】 Android Studio学习 3 - 一个demo的编译问题 【安卓学习之开发工具】 Android Studio学习 4 - 学习笔记(视频学习) 【安卓学习之开发工具

任我飞的博客 8989

Android学习笔记-Kotlin基础语法

一、Kotlin的发展历程 2011年,JetBrains发布了Kotlin的第一个版本,并在2012年将其开源。 2016年Kotlin发布了1.0正式版,代表着Kotlin语言已经足够成熟和稳定了,并且JetBrains也在自家的旗舰IDE开发工具IntelliJ IDEA中加入了Kotlin的支持。 2017年Google宣布Kotlin正式成为Android开发一级语言,并且Android Studio也加入了对Kotlin的支持。 2019年Google正式宣布了Kotlin First,未来提供

u010186280的博客 627

kotlin学习

掌握基本变量类型、声明(val、var)、循环语句、函数及类的定义使用等字符串模板及格式用$val i = 10// i = 10${}字符串格式-- String.format()// 0031416// +3.1416var/val的区别​var:可变 val:不可变推荐先使用val定义,可以避免被不小心修改,如果需要修改时再更改为var数组创建、比较数组数组创建// 1, 2, 3// 0, 0, 0// 014916比较数组:比较两个数组是否具有相同顺序的相同元素// 比较。

2401_83213163的博客 680

【Android基础】第一行代码-Kotlin语法学习笔记

创建类的时候选择 Kotlin Class/File 文件输入类名在类里面定义变量、方法等等println(name + "的年龄是" + age)4. 调用的时候省去了new关键字//去掉了new关键字maxByOrNull():返回当前集合中...最大元素map 映射:返回新集合,将集合中的元素映射成另一个值filter过滤:返回新集合,将集合中的元素进行筛选any:返回Boolean,集合中是否存在元素满足Lambda的条件,有则返回true,无则false。

msy998的博客 1169

小白快速学习 Kotlin 语法基础

这里写自定义目录标题Kotlin初体验以下是自己总结 打上的代码 Kotlin初体验 关于kotlin从17年到现在听了无数遍了,真正开始学习是在去年同事和朋友疯狂安利 说是第一语言了也要开始学习 在2020年8 9月份简单看了郭老师的《第一行代码(第三版)》,因为书太厚啦 我实在静不下心全部看完 最后在博客上面查看到大佬的总结 一口气将 Kotlin简单语法和其他组件简单学会 、光看不练都是假把戏 确实对于我来说看完有点印象 但是确实也很容易忘记 在今年找工作中发现 kotlin越来越重要了 对于新开发的

m0_46608972的博客 258
上一篇: Android学习笔记2 - 分析第一个应用
下一篇: Android学习笔记4 - 初学Activity和viewBind
Thinbug
博客等级 码龄22年 2万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值